3

次のようなxml文字列から電話番号を解析したいとしましょう:

str = """ <root> 
            <address>123 New York, NY 10019
                <div class="phone"> (212) 212-0001</div> 
            </address> 
        </root> 
    """
parser = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser()).parseText (str)
println parser.address.div.text()

電話番号は印刷されません。

このように「div」要素を「foo」に変更すると

str = """ <root> 
            <address>123 New York, NY 10019
                <foo class="phone"> (212) 212-0001</foo> 
            </address> 
        </root> 
    """
parser = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser()).parseText (str)
println parser.address.foo.text()

次に、電話番号を解析して印刷できます。

一体何が起こっているのですか?

ところで、私はgroovy 1.7.5とtagsoup 1.2を使用しています

4

3 に答える 3

1

コードを次のように変更するだけです

println parser.address.'div'.text()

これは、Groovy および他の多くの動的言語の呪いです。「div」は予約済みのメソッド名であるため、ノードを取得せずに、「アドレス」ノードを分割しようとします :)

于 2011-02-01T20:24:57.863 に答える
0

tagsoup は HTML タグを正規化する、つまり大文字にすることを思い出すようです。したがって、必要な GPath 式はおそらく

println parser.ADDRESS.DIV.text()

解析の結果を出力できると便利だと思います。そうすれば、GPath が機能しない理由を確認できます。これを使って..

println groovy.xml.XmlUtil.serialize(parser)
于 2011-08-01T13:15:28.520 に答える