我正在尝试使用xmerl_xpath在Erlang中查询已解析的XML文档,但我无法使位置谓词起作用。我没有返回第n个子元素,而是获取到目前为止所选内容的第n个元素。
示例代码,我想提取值11和21(“第一列”):
{XML,_} = xmerl_scan:string(
"<table>" ++
"<row><el>11</el><el>12</el></row>" ++
"<row><el>21</el><el>22</el></row>" ++
"</table>" ).
4 = length(xmerl_xpath:string( "//table/row/el", XML )). % OK
1 = length(xmerl_xpath:string( "(//table/row/el)[1]", XML )). % OK
1 = length(xmerl_xpath:string( "//table/row/el[1]", XML )). % Why not 2?
是否预期上次查询的结果?在一般情况下,使用xmerl_path?
提取第n个孩子的正确方法是什么?(我真正想做的是使用mochiweb_html解析HTML并使用mochiweb_xpath进行查询,但后者基本上是xmerl_xpath的包装。)
答案 0 :(得分:0)
我不知道Erlang,但是第三个XPath确实应该提取第一列 - 两个节点<el>11</el>
和<el>21</el>
- 我创建了一个简单的测试XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="//table/row/el[1]">
<xsl:copy-of select="."/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
适用于
<table>
<row>
<el>11</el>
<el>12</el>
</row>
<row>
<el>21</el>
<el>22</el>
</row>
</table>
产生
<root>
<el>11</el>
<el>21</el>
</root>
如果这不是你得到的,我怀疑你使用的库是错误的。