我有一个XML文件,其布局如下:
<root>
<node>
<descriptors>
<attribute attr="important"/>
</descriptors>
<value>
Some
</value>
<value>
text
</value>
<value>
here.
</value>
<node>
</root>
有许多节点,每个节点由descriptors
元素中的元素区分。我需要提取文本,以便我有这个:
<element>
Sometexthere.
</element>
我有一个xsl转换:
<xsl:template match="//attribute[@attr='important']">
<element>
<xsl:for-each select="../../value">
<xsl:value-of select="." />
</xsl:for-each>
</element>
</xsl:template>
这只是写入文件中每个value
元素中的所有node
元素。
我认为我并不真正理解作用域的工作方式(例如当.
指向当前元素/节点时,但循环中的当前元素/节点是什么。)
我该如何处理?
修改
我的实际xsl样式表(我正在转换docx文件):
<xsl:template match="/">
<order>
<xsl:apply-templates/>
</order>
</xsl:template>
<xsl:template match="/w:document/w:body/w:p[w:pPr/w:pStyle/@w:val='Pealkiri1']">
<name>
<xsl:for-each select="w:t">
<xsl:value-of select="." />
</xsl:for-each>
</name>
</xsl:template>
答案 0 :(得分:2)
您可以尝试匹配包含node
的{{1}}元素,而不是descriptors/attribute/@attr=...
元素本身。
attribute
上下文将相对于for-each
。
node