0

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

鉴于我有以下 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>
4

2 回答 2

1

尝试

/files/file[metadata/foo='some value 2']/location
于 2013-10-08T06:38:03.373 回答
1

如果你只需要一个值,你可以试试这个值,如果这对你来说很优雅:D

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

文件/文件/位置 - 采用位置属性

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

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

于 2013-10-08T05:46:18.503 回答