1

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 のラッパーです。)

4

1 に答える 1

0

私は Erlang を知りませんが、3 番目の XPath は確かに最初の列 (2 つのノード) を抽出する必要があり<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>

これが得られない場合は、使用しているライブラリにバグがあると思われます。

于 2012-05-29T20:20:22.430 に答える