使用xpath查询java读取xml
<?xml version="1.0" encoding="UTF-8"?>
-<ADOXML adoversion="Version 5.1" username="kvarga" database="adonisdb" time="08:55" date="30.11.2013" version="3.1">
-<MODELS>
-<MODEL version="" applib="ADONIS BPMS BP Library 5.1" libtype="bp" modeltype="Business process model" name="Product development" id="mod.25602">
-<MODELATTRIBUTES>
<ATTRIBUTE name="Version number" type="STRING"> </ATTRIBUTE>
<ATTRIBUTE name="Author" type="STRING">kvarga</ATTRIBUTE>
<ATTRIBUTE name="Creation date" type="STRING">2013-11-30, 08:50</ATTRIBUTE>
<ATTRIBUTE name="Date last changed" type="STRING">2013-11-30, 08:54:46</ATTRIBUTE>
-<INSTANCE name="Business Opportunities census" id="obj.25615" class="Activity">
<ATTRIBUTE name="Position" type="STRING">NODE x:6.5cm y:10.5cm index:7</ATTRIBUTE>
<ATTRIBUTE name="External tool coupling" type="STRING"> </ATTRIBUTE>
<ATTRIBUTE name="Description" type="STRING">I WANT THIS PARA 1</ATTRIBUTE>
<ATTRIBUTE name="Version number" type="STRING"> </ATTRIBUTE>
<ATTRIBUTE name="Author" type="STRING">kvarga</ATTRIBUTE>
<ATTRIBUTE name="Creation date" type="STRING">2013-11-30, 08:50</ATTRIBUTE>
<ATTRIBUTE name="Date last changed" type="STRING">2013-11-30, 08:54:46</ATTRIBUTE>
-<INSTANCE name="Business Opportunities census" id="obj.25615" class="Vess">
<ATTRIBUTE name="Position" type="STRING">NODE x:6.5cm y:10.5cm index:7</ATTRIBUTE>
<ATTRIBUTE name="Description" type="STRING">I DONT WANT THIS PARA 2</ATTRIBUTE>
</INSTANCE>
</MODEL>
</MODELS>
</ADOXML>
嘿,我是xml新手!实际上,我需要的是读取上面的xml文件,以便获得文本
I WANT THIS PARA 1
我只需要获得这个文本 我的xpath查询是:
String expression = "/ADOXML/MODELS/MODEL/INSTANCE/ATTRIBUTE[@name='Description' and @type='STRING']";
但我的查询结果如下:
I WANT THIS PARA 1
I DONT WANT THIS PARA 2 //this line i dont want
因此,问题是只读取名为description、类型为string的属性标记,但其paraent标记应为instance,其类应为activity
我正在使用以下代码:
String expression = "/ADOXML/MODELS/MODEL/INSTANCE/ATTRIBUTE[@name='Description' and @type='STRING']";
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET);
ArrayList<String> text = new ArrayList<String>();
int k;
for (k = 0; k < nodeList.getLength(); k++) {
String txt=nodeList.item(k).getTextContent();
txt=txt.replace("[","").replace("]","").replace("#","").replace(":", "").replace("•", "").replace("\n", " ")
.replace("\u0092", " ").replace("'", "").replace("•", " ").replace("-", " ").replace("’", " ").replace("\n", " ");
text.add(txt);
}
# 1 楼答案
试试这根绳子
# 2 楼答案
不首先停止与XPath的匹配;相反,它将返回所有匹配的元素
你需要弄清楚如何在你想要的东西上更加具体。也许你只是想要第一个
INSTANCE
或者可能是对特定
INSTANCE
的描述但ID可能非常随机,因此您需要使用实例的名称:
注意
//
将递归搜索匹配项;如果有几个MODEL
实例带有Business Opportunities census
,那么您还需要找出一种方法来区分它们