0

javax.xml.xpath を使用した Java での標準 XPath 処理は、次のように機能します。

  1. 処理するxmlの名前を指定します
  2. xpath 式を文字列として提供します。
  3. 選択した出力のタイプに応じて、ノードのリストとして、または最終的には単一の値として保存された回答を取得します。

基本的に次のように動作するはずのJavaでいくつかのテストを作成する必要があります.xpath式を文字列として提供し、この式のxpath出力が指定された出力(文字列としても提供)と等しいかどうかをチェックします. したがって、ノード ツリーなどをトラバースする必要はありません。xpath プロセッサの出力を文字列として取得するだけで済みます。これを行う方法はありますか?

4

2 に答える 2

0

XPath.evaluate(expression, inputSource)あなたが望むことをするようです。

編集:ここにいくつかのサンプルコードがあります:

String xml = "<foo><bar>text</bar></foo>";
Reader reader = new StringReader(xml);
InputSource inputSource = new InputSource(reader);
XPath xpath = XPathFactory.newInstance().newXPath();
System.out.println(xpath.evaluate("/foo/bar", inputSource));

編集:この質問は、目標を達成するためにすぐに使用できる Java API がないことを示しています。XML をテストしている場合は、XmlUnitを参照してください。

于 2012-08-24T12:54:19.873 に答える
0

使用する場合

xPathExpression.evaluate(document);

どこdocumentに DOM ドキュメントがある場合、最初に一致したノードの文字列表現を返します。XPath が単一のテキスト ノードを選択していると思われるユース ケースでは、おそらくこれで問題ありません。そうでない場合は、以下から返されるtoString()メソッドを作成できます。NodeList

xPathExpression.evaluate(document, XPathConstants.NODESET);

編集 1:これは、a を XML ドキュメントに変換して印刷する方法に関するSOの記事です。NodeList

count編集 2:単一の値を返す論理演算子または論理演算子を使用する XPath 式がある場合は、スローされた例外をキャッチして、適切なアクションを実行できます。

try {
    NodeList nodeList = (NodeList) xPathExpression.evaluate(document, XPathConstants.NODESET);
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node node = nodeList.item(i);
        System.out.println(node.getNodeName());
    }
} catch (XPathExpressionException e) {
    String result = xPathExpression.evaluate(document);
    System.out.println(result);
}
于 2012-08-24T12:54:29.037 に答える