0

我有一个这样的 xml,它是从数据库中直接获得的(它不需要是具有正确开始和结束标签的有效文件)。我需要从这个 xml 中提取数据,例如。颜色,级别,前缀等。由于不能保证正确的 xml 格式,我这样做的唯一方法是正则表达式..或者是吗?

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

请为此提出解决方案。或者除了正则表达式之外还有什么方法可以解决这个问题。

4

2 回答 2

2

也许,可以使用http://jtidy.sourceforge.net/之类的库将初始 XML 转换为格式良好,然后使用 xPath 或节点扫描提取数据。

于 2013-11-14T09:58:49.177 回答
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>

如果按照 pasha701 的建议将其格式化为 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));

告诉我们您想要什么,并会提供相应的帮助。

于 2013-11-14T10:11:14.027 回答