例如,这是我有的那种xml文件:
<Node>
<Sample A>
...
</Sample A>
<Sample B>
<myType>importantValue</myType>
</Sample B>
...
<Sample Z>
<myValue>16</myValue>
</Sample Z>
<Node>
<Sample A>
...
</Sample A>
<Sample B>
<myType>importantValue</myType>
</Sample B>
...
<Sample Z>
<myValue>16</myValue>
</Sample Z>
如何进行类似于“在myValue&gt; x中选择myType和myValue”的查询?
我正在尝试使用xPath来找到正确的元素,我确信有一种简单的方法可以做到这一点,但由于我是XML新手,我找不到简单的方法..提前感谢!< / p>
答案 0 :(得分:0)
以下是步骤。希望你没有错过它们。
从文件或流中创建文档
StringBuilder xmlStringBuilder = new StringBuilder();
xmlStringBuilder.append("<?xml version="1.0"?> <class> </class>");
ByteArrayInputStream input = new ByteArrayInputStream(
xmlStringBuilder.toString().getBytes("UTF-8"));
Document doc = builder.parse(input);
构建XPath
XPath xPath = XPathFactory.newInstance().newXPath();
准备路径表达并对其进行评估
String expression = "/Node/SampleB";
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
迭代NodeList
for (int i = 0; i < nodeList.getLength(); i++) {
Node nNode = nodeList.item(i);
...
}
检查属性
//returns specific attribute
getAttribute("attributeName");
//returns a Map (table) of names/values
getAttributes();
检查子元素
//returns a list of subelements of specified name
getElementsByTagName("subelementName");
//returns a list of all child nodes
getChildNodes();
在你的情况下,
String expression = "/Node/SampleB";
for (int i = 0; i < nodeList.getLength(); i++) {
Node nNode = nodeList.item(i);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println(eElement.getElementsByTagName("myType")
.item(0).getTextContent());}}
答案 1 :(得分:0)
假设您的XML结构如下:
<Node>
<Sample>
<someValue>sharks</someValue>
</Sample>
<Sample>
<myValue>16</myValue>
</Sample>
<Sample>
<myType>importantValue</myType>
</Sample>
</Node>
<Node>
...
</Node>
...
Samples
按Node
元素分组,然后你想要的是找到具有你想要的属性的特定Node
,然后找到同一个{{1}的值你想要的。
这是一个XPath表达式,Node
获得Node
:
Sample/myValue
这标记为“让所有//Node[Sample/myValue = '16']
孩子Nodes
的孩子Sample
的值为myValue
”。
您可以添加它以获得不同的值:
'16'
这会更改XPath表达式的返回值,其内容为“从//Node[Sample/myValue = '16']/Sample/myType
获取值,其父级为myType
,其父级为Sample
Node
}的值是Sample/myValue
“。
要从XPath表达式中获取多个值,可以使用'16'
运算符将多个表达式组合在一起:
|
这读作“获取//Node[Sample/myValue = '16'] | //Node[Sample/myValue = '15']
值为Nodes
或Sample/myValue
”的所有'16'
。