我无法找到正确的语法来根据兄弟元素数据查找元素的值。
鉴于我有以下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>
答案 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