java - 如何从格式不正确的xml中获取值

标签 java xml

我有以下字符串(您可以说xml)

<News News-type="alert" ID="498" NewsPath="GetNewsFrom[3]" NewsMark="0" />
<News News-type="alert" ID="1507" NewsPath="GetNewsFrom[3]" NewsMark="0"/>
<News News-type="alert" ID="1509" NewsPath="GetNewsFrom[3]" NewsMark="0"/>
<News News-type="alert" ID="1511" NewsPath="GetNewsFrom[3]" NewsMark="0" />
<News News-type="alert" ID="1520" NewsPath="GetNewsFrom[3]" NewsMark="0" />
<News News-type="alert" ID="2999" NewsPath="data-theft[1]" NewsMark="0" />
<News News-type="alert" ID="2535" NewsPath="GetNewsFrom[3]" NewsMark="0" />
<News News-type="alert" ID="6052" NewsPath="GetNewsFrom[3]" NewsMark="100" />


我无法在上面应用xml阅读器/解析器,他们说这不是格式正确的xml文件。能否请你帮我如何从这些字符串中获取输出

String attr[4]={"News-type","ID", "NewsPath", "NewsMark"};
String values[4];
//There values dynamically in array as well 
int i;
for(i=0; i<4;i++)
{
    if(i==0)
        value[i]=????;
    else if(i==1)
    ...
}


如何获取values[]数组中的所有属性值,以便可以进一步使用它。

例外:
在Java中将其作为xml文件传递时
    [致命错误]:2:2:根元素之后的文档中的标记必须格式正确。
    2014年3月18日,上午11:43:21 GUI.NewsReport jMenuItem2ActionPerformed
    严重:null
    org.xml.sax.SAXParseException; lineNumber:2; columnNumber:2;根元素后的文档中的标记必须格式正确。
        在com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
        在com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
        在javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
        在GUI.NewsReport.ReadXML(NewsReport.java:185)
        在GUI.NewsReport.jMenuItem2ActionPerformed(NewsReport.java:126)
        在GUI.NewsReport.access $ 100(NewsReport.java:33)
        在GUI.NewsReport $ 2.actionPerformed(NewsReport.java:88)
        在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
        在javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2341)
        在javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        在javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        在javax.swing.AbstractButton.doClick(AbstractButton.java:376)
        在javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
        在javax.swing.plaf.basic.BasicMenuItemUI $ Handler.mouseReleased(BasicMenuItemUI.java:877)
        在java.awt.Component.processMouseEvent(Component.java:6505)
        在javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
        在java.awt.Component.processEvent(Component.java:6270)
        在java.awt.Container.processEvent(Container.java:2229)
        在java.awt.Component.dispatchEventImpl(Component.java:4861)
        在java.awt.Container.dispatchEventImpl(Container.java:2287)
        在java.awt.Component.dispatchEvent(Component.java:4687)
        在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
        在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
        在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        在java.awt.Container.dispatchEventImpl(Container.java:2273)
        在java.awt.Window.dispatchEventImpl(Window.java:2719)
        在java.awt.Component.dispatchEvent(Component.java:4687)
        在java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
        在java.awt.EventQueue.access $ 200(EventQueue.java:103)
        在java.awt.EventQueue $ 3.run(EventQueue.java:694)
        在java.awt.EventQueue $ 3.run(EventQueue.java:692)
        在java.security.AccessController.doPrivileged(本机方法)
        在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)
        在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87)
        在java.awt.EventQueue $ 4.run(EventQueue.java:708)
        在java.awt.EventQueue $ 4.run(EventQueue.java:706)
        在java.security.AccessController.doPrivileged(本机方法)
        在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)
        在java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
        在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)处`
    我在执行..时遇到了这个异常


谢谢分配!

最佳答案

没有单个根元素,因此它不是格式正确的XML文档...尽管它可能是格式良好的XML文档片段。

如果后者为真,则用Java解析它的最简单的解决方案是实现一个修改后的阅读器,该阅读器在其周围包装一个虚拟顶级元素-例如,在内容之前使用<wrapper>,然后在其后使用</wrapper>。 。然后在意识到<wrapper>不是原始文件内容的一部分的情况下实现应用程序的其余部分。

关于java - 如何从格式不正确的xml中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454814/

相关文章:

java - java springboot微服务中如何高效处理碎片请求?

java - Android 键盘分辨率

java - Maven 不编译类并且 war 文件中没有类文件

java - 使用 xsl 转换为 PDF 时出错

php - 通过 SimpleXML PHP 编辑 XML 节点

java - 如何在JFrame中排列,升序,降序,冒泡,输入区域,输出区域

java - 在 Android 和 OpenCV 中使用 BlockingQueue 进行多处理

java - Jackson XML 列表元素匹配它们的根名称

xml - 在已创建的菜单上应用组

java - XML 验证 - 使用多个 xsd