0

私の問題は、html のテキスト部分を取得するように設計された XPath 式から元の html を取得する必要があることです。たとえば、現在の html を取得した場合:

<div class='text'>
    <p class='nointerrest'> blabla </p>
    <p class='goodstuff'> blablabla </p>
    <p class='goodstuff'> blablabla </p>
</div>

次に、私のXPath式は文字列です:

    string-join(//p[@class='goodstuff'],' ') 

私に与える:

        "blablabla blablabla"

私を返すことができるXPath式はありますか:

<p class='goodstuff'> blablabla </p>
<p class='goodstuff'> blablabla </p>

文字列として?(可能であれば、元の XPath 式に最も類似した XPath 式を使用します)

前もって感謝します

4

1 に答える 1

0

目的の出力を得るには、XPath だけでは不十分です。XPath はドキュメント クエリ言語であり、XML 書式設定言語ではないため、これについては個別の手順で考える必要があります。

  1. まず、XPath を使用して、次のドキュメントをクエリしますNodeList

    NodeList list = (NodeList) xpath.evaluate(
        "//p[@class='goodstuff']", document, XPathConstants.NODESET);
    
  2. 次に、次を作成しますTransformer

    javax.xml.transform.TransformerFactory tfactory = 
        TransformerFactory.newInstance();
    javax.xml.transform.Transformer xform = tfactory.newTransformer();
    
  3. そして、それを使用して各ノードを出力します。

    for (int i = 0; i < list.getLength(); i++) {
        Node node = list.item(i);
        javax.xml.transform.Source src = new DOMSource(node);
        java.io.StringWriter writer = new StringWriter();
        javax.xml.transform.Result result = new   
        javax.xml.transform.stream.StreamResult(writer);
        xform.setOutputProperty(
        javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
        xform.transform(src, result);
        System.out.println(writer.toString());
    }
    
于 2012-07-23T18:48:59.723 に答える