java - 哪些方法可用于从 Java 文件中返回有效和无效的 XML 数据?

标签 java xml xslt jaxb xquery

我有以下应该是 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/

相关文章:

python xml.etree - 删除节点但保留子节点(将子节点分配给祖 parent )

xslt - XPATH:for-each中的多个否定

c# - XSL + XML -> 用于 C# 的 PDF

html - 使用 XSLT 以两个为一组将 XML 元素格式化为 HTML

java - 数学表达式的正确优先级是什么

java - 具有多个命名空间的 JXPath

java - 有没有办法在java Scanner中使用变量而不是路径

java - 以编程方式从 XSD 文件创建特定 XML 元素

java - 在忽略大小写的情况下使用正则表达式匹配字符串

java - Spring mvc bean 在没有 @Controller 声明的情况下充当 Controller