XSLT和XPATH使用兄弟元素中的数据查找正确的元素

时间:2013-10-08 04:49:05

标签: xslt xpath

我无法找到正确的语法来根据兄弟元素数据查找元素的值。

鉴于我有以下XML:

<files>
    <file>
        <location>location1.txt</location>
        <metadata>
            <foo>some value 1</foo>
        </metadata>
    </file>
    <file>
        <location>location2.txt</location>
        <metadata>
            <foo>some value 2</foo>
        </metadata>
    </file>
    <file>
        <location>location3.txt</location>
        <metadata />
    </file>
</files>

如果我只查找file / metadata / foo =“some value 2”的位置,找到正确位置值的正确XPATH表达式是什么?如果我依赖于兄弟姐妹中的数据或兄弟姐妹的孩子,我似乎无法找到正确的语法来定位它。

我找到了一个解决方案,我使用xslt迭代文件元素,并以这种方式找到合适的值,但它不是很优雅。

<xsl:variable name="profileAlias">
    <xsl:for-each select="files/file">
        <xsl:if test="metadata/foo='some value 2'">
            <xsl:value-of select="location">
        </xsl:if>   
    </xsl:for-each>
</xsl:variable>

2 个答案:

答案 0 :(得分:1)

如果你需要一个唯一的价值,你可以试试这个,如果这对你来说很重要:D

<xsl:value-of select="files/file/location[following-sibling::metadata/foo/text()='some value 2']"/>

files / file / location - 采用位置属性

[follow-sibling :: metadata / foo / - 具有下一个属性metadata / foo /

text()='some value 2'] - 文本等于'some value 2'

答案 1 :(得分:1)

尝试

/files/file[metadata/foo='some value 2']/location