Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从形状不好的xml中获取值_Java_Xml - Fatal编程技术网

Java 如何从形状不好的xml中获取值

Java 如何从形状不好的xml中获取值,java,xml,Java,Xml,我有以下字符串(可以说是xml) 我无法对其应用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)

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


我无法对其应用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)
    ...
}
String attr[4]={“新闻类型”、“ID”、“新闻路径”、“新闻标记”};
字符串值[4];
//数组中也存在动态值
int i;

对于(i=0;i来说,除了做一些预处理(这应该比正则表达式更好),您的另一种选择是使用如下正则表达式:
News type=\\”([^\\”]+?)\\“\\s+ID=\\”([^\\”]+?)\“\\s+NewsPath=\\”([^\\”]+?)\“\\s+NewsMark=\\”([^\\\”]+?)\”

上面的正则表达式应该与您所关注的内容相匹配,并将其放在以后可以访问的组中


可以对正则表达式进行解释。

除了进行一些预处理(这应该比正则表达式更好),您的另一种选择是使用如下正则表达式:
News type=\\”([^\\“]+?)\“\\s+ID=\\”([^\\“]+?)\\\“\\s+NewsPath=\\”([^\\”]+?)\\\\“\\s+NewsMark=\\”([^\\\\”]+?)\\“

上面的正则表达式应该与您所关注的内容相匹配,并将其放在以后可以访问的组中


可以对正则表达式进行解释。

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


如果后者是真的,那么在Java中解析它的最简单的解决方案就是实现一个修改过的读取器,它将一个虚拟的顶级元素包装在读取器周围——例如,在内容前面加上
,然后在内容后面加上
原始文件内容。

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


如果后者是真的,那么在Java中解析它的最简单的解决方案就是实现一个修改过的读取器,它将一个虚拟的顶级元素包装在读取器周围——例如,在内容前面加上
,然后在内容后面加上
原始文件内容。

在这种情况下,解决这个问题的简单方法是在所有
新闻
标记中添加一个父标记,然后像解析任何其他xml一样解析它

<NewsParent>
<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" />
</NewsParent>

在这种情况下,解决这个问题的简单方法是向所有的
新闻
标记中添加一个父标记,然后像解析任何其他xml一样解析它

<NewsParent>
<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" />
</NewsParent>


使用regexp如何?此文本似乎有易于匹配的模式。我将尝试编写一个模式来回答。什么说它不是格式良好的xml?@LeosLiterak请不要使用regex解析xml。以下是一些示例,说明为什么这是一个糟糕的计划。您不能使输入格式良好吗?例如,您可以在开始时分别附加和在您的输入结束时。@NickHolt我尝试在开始和结束时添加
,但没有成功。使用regexp如何?此文本似乎有易于匹配的模式。我将尝试编写一个模式来回答。什么说它不是格式良好的xml?@LeosLiterak请不要使用regex来解析xml。下面是一些示例,说明为什么它是糟糕的计划。你不能让输入格式正确吗?例如,你可以在输入的末尾分别附加和在开始处。@NickHolt我尝试在开始和结束处附加
,但没有成功。
**
在第二条记录上产生异常。你能在第二条记录上发布异常吗?
**
它产生异常。你能发布异常吗?