Я следующий фрагмент XMLРазработка родительского имени элемента
<View>
<File>
<Name>somefile_name</Name>
</File>
</View>
<View>
<View>
<Directory>
<Name>somedirectory_name</Name>
</Directory>
</View>
<View>
<Pipe>
<Name>somepipe_name</Name>
</Pipe>
</View>
и следующий шаблон XSLT
<xsl:template match="View" mode="view_mode" >
<xsl:if test=".//Name" >
<data name="objectName">
<xsl:atribute name="value">
<!-- I would like to prefix the object name with its type as per
Directory:somedirectory_name. Each use of name() I have tried
always results in matching the View element. What xpath can I use
to gain the Name element's parent element name ie 'File', 'Pipe',
or 'Directory'
-->
<xsl:value-of select=".//Name" />
</xsl:atribute>
</xsl:if>
</xsl:template>
Мой желаемый результат, для данного фрагмента входного выше будет
<data name="objectName" value="File:somefile_name" />
<data name="objectName" value="Directory:somedirectory_name" />
<data name="objectName" value="Pipe:somepipe_name" />
Я пытался обработать xpath, чтобы идентифицировать родителя элемента Name в view_mode tem плита выше, но без успеха. Может кто-нибудь дать некоторые предложения.
Заранее спасибо
спасибо Михаилу (и Tirma и Джоэл). Я понимаю, что итерация над элементом Name будет лучшим решением, но для понимания решения «name (.// Name/..)» означает, что мне нужно больше узнать об узлах и выражениях xpath. – BurnA
@BurnA Выражение '.// Name/..' является аббревиатурой 'descendant :: Name/parent :: *', которая выбирает родительский элемент потомка с именем «Name». Теперь просто используйте это выражение как аргумент функции name(), чтобы получить имя этого элемента. –