我正在寻找可以执行以下操作的代码。给出一段XML,比如:

<c>Some text</c>

以及完整的XML文件:
<a>
   <b>
      <c>Some text</c>
   </b>
</a>

检查代码片段是否确实是完整XML文件的有效子集。我一直在关注XMLUnit这看起来很不错,但它似乎只验证了完整的文件。
对于上面的示例,可以使用简单的字符串比较,但我希望支持的其他功能可能是:
1)子元素的顺序不重要。例如。
<b>
   <c>Some text</c>
   <d>Other text</d>
</b>

是的有效子集
<a>
   <b>
      <d>Other text</d>
      <c>Some text</c>
   </b>
</a>

2)忽略空白、制表符、新行等。
3)xmlunit的骨架特性是一个不错的选择,它检查节点名和结构,但不检查内容值。例如,<c>Some text</c><c>Other text</c>相比是有效的。

最佳答案

我不认为有这样一个库,但是您可以通过以下方式解决它(如果您的xml片段以元素开头)。我想你对xmlunit很熟悉。

public boolean isSubset(Document document, Element element) {
    NodeList list = document.getElementsByTagName(element.getNodeName());
    for (int i = 0; i < list.getLength(); i++) {
        Element el = (Element) list.item(i);
        Document clone = toNewDocument(el);
        //compare element with clone with XMLUnit
        //...
        if (equal) {
            return true;
        }
    }
    return false;
}

private Document toNewDocument(Element el) {
    // createing a new DOM-document...
    Document document = documentBuilder.newDocument();
    Node node = document.importNode(el, true);
    document.getDocumentElement().appendChild(node);
    return document;
}

关于java - 是否存在Java库来验证XML代码段是较大XML文件的子集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4276437/

10-08 22:07
查看更多