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

Fel*_* C. 3 java xml xslt xquery jaxb

我有以下数据应该是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>
Run Code Online (Sandbox Code Playgroud)

所以,基本上我有多个根元素(product)...

关键是我正在尝试将这些数据转换为2个XML文档,1个用于有效节点,1个用于无效节点.

有效节点:

<Product>
   ...
</Product>
Run Code Online (Sandbox Code Playgroud)

节点无效:<ProductTTTTT>...</Product><Product>...</ProductAAAAAA>

然后我在想如何使用JAVA(而不是web)实现这一目标.

  • 如果我没有错,使用XSD验证它将使整个文件无效,因此不是一个选项.
  • 使用默认的JAXB解析器(unmarshaller)将导致上面的项目,因为它在内部创建了我的实体的XSD.
  • 使用XPath只是(据我所知)将只返回整个文件,我没有找到像GET这样的方法!VALID(这只是为了解释......)
  • 使用XQuery(可能?)..顺便说一下,如何在JAXB中使用XQuery?
  • XSL(T)将在XPath上引发同样的事情,因为它使用XPath来选择内容.

那么......我可以使用哪种方法来实现目标?(如果可能的话,请提供链接或代码)

Mic*_*Kay 5

首先,你混淆了有效和良好的形式.你说你想找到无效的元素,但你的例子不仅无效,而且形象错误.这意味着除了向您抛出错误消息之外,没有XML解析器会对它们执行任何操作.您不能使用JAXB或XPath,XQuery,XSLT或其他任何东西来处理非XML的东西.

你说"不幸的是我没有访问发送这种xml格式的系统".我不确定你为什么称它为XML格式:它不是.我也不明白为什么你(以及StackOverflow上的许多其他人)都准备花时间在这样的垃圾中挖掘,而不是告诉发件人让他们一起行动.如果你吃的是带有蛆的沙拉,你会尝试将它们拿出来,还是将它送回去更换?您应该对坏数据采用零容忍方法; 这是发送者学习提高质量的唯一方法.