<?xml version="1.0"?>
<shop>
<order>
<name>Mr A Beasy</name>
<date>12/03/2017</date>
<payment>Debit Card</payment>
</order>
<order>
<name>Mrs D Ehffi</name>
<date>13/04/2017</date>
<payment>Paypal</payment>
</order>
</shop>
以上面的xml为例,我试图检索每个订单&#39;以及其中包含的节点名称和文本内容。我希望最终将每个name
,date
和payment
的文本内容保存到java对象中的相应字段。
问题是,name
,date
和payment
节点并不总是保证在那里。所以我需要一种方法来首先检查name
节点是否存在且不为空,然后提取其文本内容并将其保存到我的java对象。
我试过了:
NodeList nodeList = (NodeList) path.evaluate("/shop/order", doc, XPathConstants.NODESET);
String name = nodeList.item(i).getNodeName();
String text = nodeList.item(i).getTextContent();
我希望这会给我一个很好的阵列,有两个&#39;命令&#39;我可以迭代的节点集并获取节点及其内容的值,但它不起作用。出于某种原因,我的nodeList
中有一堆\n
。
我不确定如何在我的nodeList
中搜索名为name的特定节点,如果存在则提取其值。有人可以帮忙吗?
答案 0 :(得分:0)
我希望这会给我一个很好的数组,其中有两个'order'节点集 我可以迭代并获取节点及其值的值 内容,但它不起作用。出于某种原因,我的nodeList有一堆 其中的\ n。
在您提供的示例XML中,<order>
元素包含不同类型的子元素。 <name>
,<date>
和<payment>
元素有元素节点,但也有文本节点包含空格和换行符的组合。每个节点的文本内容由文档节点子节点(仅)与该节点及其所有后代的串联组成,按文档顺序排列。
XPath表达式/shop/order
求值为包含两个Node
个对象的节点集,每个对象代表一个此类<order>
节点。这可能很适合您的目的,但在这些节点上调用getTextContent()
则不会,因为结果不包含哪些文本来自哪个元素的信息。
您可以通过至少两种方式获得您想要的内容 - 每个<order>
元素子元素的名称和内容:
<order>
节点作为上下文或<order>
为根的子树。XPath方法的重量有点重,但它可以更加紧凑地表达,它可以自然地处理丢失或不同顺序的子元素。我不确定我会首先选择XPath来获得具有如此简单形式的数据,但是既然你已经这样做了,你也可以继续使用它。