1

XMLUnit 1.5 を使用している私の Java プログラムでは、2 つの XML ファイルを (名前空間を使用して) 比較します。しかし、XPathes には名前空間が含まれていません。XMLUnit にそれを指示するにはどうすればよいですか? それは可能ですか?

これが私のコードです:

        control = new FileReader(file1);
        test = new FileReader(file2);

        list = new ArrayList<Unterschied>();

        Diff diff;
        diff = new Diff(control, test);

        diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());

        if (diff.similar())
        {
            MessageDialog.openInformation(null, "Info", "Similar");
        }

        else if (!diff.similar())
        {

            DetailedDiff detDiff = new DetailedDiff(diff);
            detDiff.overrieElementQualifier(new ElementNameAndAttributeQualifier());
            @SuppressWarnings("unchecked")
            List<Object> differences = detDiff.getAllDifferences();


            for (Object object : differences) 
            {
                Difference difference = (Difference) object;
                if (!difference.isRecoverable() && !difference.getDescription().contains("number of child nodes"))
                {
                    controlXPath = difference.getControlNodeDetail().getXpathLocation();  // without Namespaces!
                    controlValue = difference.getControlNodeDetail().getValue();
                    testXPath = difference.getTestNodeDetail().getXpathLocation();   // without Namespaces!             
                    testValue = difference.getTestNodeDetail().getValue();

                    list.add(new Unterschied(controlOrt, controlWert, testOrt, testWert));
                }
            }

プログラムの後半で、このノードの正しい位置を取得するためにこれらの XPathes を評価しました。これらの位置で、ユーザーが違いを確認できるように、エディターで適切なテキストを選択します。

評価するための私のコード:

 public void evaluateXPath(String xp, Node node) {


    XPath newXPath = new XPathFactoryImpl().newXPath();

    XPathExpression xpExp = newXPath.compile(xpath);

    NodeList nodeList = (NodeList) xpExp.evaluate(node, XPathConstants.NODESET);

    int length = nodeList.getLength();
    for (int i=0; i < length; i++) {

       IDOMNode iDOMnode = (IDOMNode) nodeList.item(i);
       textEditor.selectAndReveal(iDOMnode.getStartOffset(), iDOMnode.getEndOffset()-iDOMnode.getStartOffset());
    }
}

あなたの助けに感謝し、私の悪い英語を申し訳ありません! ;)

4

1 に答える 1

0

いいえ、XMLUnit 1.x は名前空間をまったく示さずにプレーンな XPath のみを返します。

XMLUnit 2.x (開発中) は、NS-URI ごとに構成できる名前空間のプレフィックスを使用して XPath を返します。

于 2015-02-03T17:07:11.883 に答える