我有一个像这样的xml,它是直接从数据库获得的(它不需要是一个有正确的开放和结束标记的有效的。)我需要从这个xml中获取数据,例如。颜色,级别,前缀等。由于不能保证正确的xml格式,我这样做的唯一方法是Regex ..或者是它?
xml看起来像这样
<indicator label_unit_en="Index points" label_unit_de="Basis punkte">
<partition id="P_ABC_DEF.3">
<part color="darkgreen" level="50" prefix_en="aaa 111" prefix_de="unt ü 50">
<part color="lightgreen" level="100" prefix_en="50 to 100" prefix_de="qwe 100">
<part color="lightorange" level="200" prefix_en="100 to 200" prefix_de="100 qw 200">
<part color="darkorange" level="300" prefix_en="200 to 300" prefix_de="20 w0">
<part color="lightred" level="500" prefix_en="300 to 500" prefix_de="rr 0">
part color="darkred" level="99999" prefix_en="above 500" prefix_de="ü 2">
</partition>
</indicator>
任何人都可以建议我从这个xml中提取数据吗???
我可以从中提取数据
color(color=\"(\\w+?)\"),
level(level=\"(\\w+?)\)
,但不是其他人。
我创建的任何匹配器都找不到prefix_en,prefix_de, label_unit_en, label_unit_de
请为此建议解决方案。或者除了正则表达式之外还有什么方法可以解决这个问题。
答案 0 :(得分:2)
也许,可以使用http://jtidy.sourceforge.net/之类的库将初始XML转换为格式良好,然后使用xPath或节点扫描提取数据。
答案 1 :(得分:0)
您粘贴的代码需要大量格式才能被视为xml:
<?xml version="1.0" ?>
<indicator label_unit_en="Index points" label_unit_de="Basis punkte">
<partition id="P_ABC_DEF.3">
<part color="darkgreen" level="50" prefix_en="aaa 111" prefix_de="unt ü 50"/>
<part color="lightgreen" level="100" prefix_en="50 to 100" prefix_de="qwe 100"/>
<part color="lightorange" level="200" prefix_en="100 to 200" prefix_de="100 qw 200"/>
<part color="darkorange" level="300" prefix_en="200 to 300" prefix_de="20 w0"/>
<part color="lightred" level="500" prefix_en="300 to 500" prefix_de="rr 0"/>
<part color="darkred" level="99999" prefix_en="above 500" prefix_de="ü 2"/>
</partition>
</indicator>
如果将其格式化为pasle701消化的xml,则可以获取值,否则可以对此进行字符串操作:
String result = "<indicator label_unit_en=\"Index points\" label_unit_de=\"Basis punkte\">"+
"<partition id=\"P_ABC_DEF.3\">"+
"<part color=\"darkgreen\" level=\"50\" prefix_en=\"aaa 111\" prefix_de=\"unt ü 50\">"+
"<part color=\"lightgreen\" level=\"100\" prefix_en=\"50 to 100\" prefix_de=\"qwe 100\">"+
"<part color=\"lightorange\" level=\"200\" prefix_en=\"100 to 200\" prefix_de=\"100 qw 200\">"+
"</partition>"+
"</indicator>";
System.out.println(x.substring(x.indexOf("color=")+7,x.indexOf(" ", x.indexOf("color="))-1));
告诉我们你想要什么,并相应地提供帮助。