使用XSLT使用嵌套属性转换XML

时间:2013-07-18 10:21:52

标签: xml xslt

我有一个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>

1 个答案:

答案 0 :(得分:2)

您可以尝试匹配包含node的{​​{1}}元素,而不是descriptors/attribute/@attr=...元素本身。

attribute上下文将相对于for-each

node