我有以下应该是 XML 的数据:
<?xml version="1.0" encoding="UTF-8"?>
<Product>
<id>1</id>
<description>A new product</description>
<price>123.45</price>
</Product>
<Product>
<id>1</id>
<description>A new product</description>
<price>123.45</price>
</Product>
<ProductTTTTT>
<id>1</id>
<description>A new product</description>
<price>123.45</price>
</Product>
<Product>
<id>1</id>
<description>A new product</description>
<price>123.45</price>
</ProductAAAAAA>
所以,基本上我有多个根元素 ( product
)...
关键是我正在尝试将此数据转换为 2 个 XML 文档,1 个用于有效节点,另一个用于无效节点。
有效节点:
<Product>
...
</Product>
无效节点:<ProductTTTTT>...</Product>
和 <Product>...</ProductAAAAAA>
然后我在想如何使用 JAVA(而不是 Web)实现这一点。
- 如果我没记错的话,用 XSD 验证它会使整个文件无效,所以不是一个选项。
- 使用默认的 JAXB 解析器(解码器)将导致上面的项目,因为它在内部创建了我的实体的 XSD。
- 仅(据我所知)使用 XPath 只会返回整个文件,我没有找到一种方法来获得类似 GET !VALID 的东西(这只是为了解释......)
- 使用 XQuery(也许?)..顺便问一下,如何将 XQuery 与 JAXB 结合使用?
- XSL(T) 在 XPath 上会导致同样的结果,因为它使用 XPath 来选择内容。
那么...我可以使用哪种方法来实现目标? (如果可能,请提供链接或代码)
最佳答案
首先,您混淆了 valid 和 well-formed。你说你想找到无效的元素,但你的例子不仅无效,而且格式错误。这意味着除了向您抛出错误消息之外,没有 XML 解析器会对它们做任何事情。您不能使用 JAXB、XPath、XQuery、XSLT 或任何东西来处理非 XML 的内容。
您说“不幸的是,我无权访问发送此 xml 格式的系统”。我不确定您为什么将其称为 XML 格式:它不是。我也不明白为什么您(以及 StackOverflow 上的许多其他人)准备花时间像这样挖掘垃圾而不是告诉发件人让他们一起行动。如果你吃到的沙拉里有蛆,你会试着把它们挑出来,还是会寄回去更换?您应该对不良数据采取零容忍的态度;这是发件人学习提高质量的唯一途径。
关于java - 哪些方法可用于从 Java 文件中返回有效和无效的 XML 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012383/