java - 是否有 Java 库来验证 XML 片段是较大 XML 文件的子集?

标签 java xml comparison

我正在寻找可以执行以下操作的代码。给定一段 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/

相关文章:

file - 如何在当前文件夹中查找可能重复的文件?

PHP 字符串比较使用 '=='

java - Apache Camel 获取交换路径

java - 在 servlet 之间共享上传的文件

java - 如何更改 eclipse 中查询的 sysdate 格式?

java - 将 XML 转换为属于同一模式的不同版本且稍有不同的 XML

java - 聚合打破了封装

java - 在java中并行构造XML元素

c# - 在 XmlDocument Load 之前是否仍然要删除 Ampersand?

.net - 如何制作一个 IEqualityComparer for (int*int) [] 进行结构比较?