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