我正在尝试读取设置如下的文件:
<file>
<name>My name</name>
<size>My size</size>
<relatedfiles>
<relatedfile>My related file 1</relatedfile>
<relatedfile>My related file 2</relatedfile>
<relatedfile>My related file 3</relatedfile>
</relatedfiles>
</file>
要获取名称/大小字段,我使用的是XPath表达式
"file/name"
和
"/size"
到目前为止已经有效了。
现在,我想一次读取相关文件,一个相关文件。我已经考虑过将第一个作为
/relatedfiles/relatedfile
让我到第一个相关的文件,但我不知道如何进入下一个单独的文件(我已经看过包括跟随兄弟的例子,但是教程声明它返回所有兄弟姐妹,我只想要一次工作一次)...
感谢。
答案 0 :(得分:1)
/ relatedfiles / relatedfile [&lt; index&gt;]将为您提供特定节点。请注意,XPath索引来自1。
修改强>
好的,我应该抓住这个,很抱歉我发布了我上面所做的事情。
正确的路径应该 // relatedfiles / relatedfile并[d索引&gt;]
这就是说,无论上下文如何,查看所有节点并找到以相关文件开头的任何内容查找子节点相关文件,获取索引元素。
您可以轻松地将其写为// relatedfiles [&lt; index&gt;]以及
答案 1 :(得分:0)
如果您使用XQuery(其中XPath是子集),则EXPath文件模块允许您使用for子句进行迭代并对每个单独的文件执行操作,如:
for $file in doc("file.xml")//relatedfile
where f:exists($file)
return f:read-text($file)
返回一个字符串序列,每个字符串包含一个文件的内容。
答案 2 :(得分:0)
如果你有XPath someExpr
选择想要的元素并想要选择 next sibling 这样的元素,请使用:
someExpr/following-sibling::myElementName[1]
答案 3 :(得分:0)
// relatedfiles / relatedfile将返回全部三个。您可以迭代或者您可以通过筛选您感兴趣的特定索引进行选择:// relatedfiles / relatedfile [n]
循环,你可以做类似
的事情<xsl:for-each select="//relatedfiles/relatedfile">
<xsl:value-of select="."/>
</xsl:for-each>