2010-11-10 66 views
1

我正在尝试获取此XML中第一个节点的文本内容。第一个节点(可抵扣)是一个元素节点,当我得到的文本内容,我得到“日历年$ $ 1,500 $ 1,500 3000多种”,而不是仅仅“日历年”获取xml元素节点的文本内容

<Item type="Deductible" name="Deductible" id="a">Calendar Year 
<Item type="Text" name="Individual" id="b">$1,500</Item> 
<Item type="Text" name="Individual Out-of-network" id="id_4">$1,500</Item> 
<Item type="Text" name="Family" id="c">$3,000</Item> 
<Item type="Text" name="Family Out-of-network:" id="id_5">$3,000</Item> 
</Item> 

这是我想

dbuilder = dbc.newDocumentBuilder(); 
Document doc = dbuilder.parse(new InputSource(new StringReader(plan.getProvisions()))); 
NodeList nl = doc.getElementsByTagName("Item"); 
for(int i = 0 ; i < nl.getLength(); i++){ 
    if(i == row){ 
     org.w3c.dom.Element e = (org.w3c.dom.Element)nl.item(i); 
     value = e.getTextContent(); 
    } 
} 
+0

发布您正在使用的代码。看起来您正在选择所有子节点以及Deductible,但没有更多信息,这是不可能告诉的。另外,你的XML例子是不完整的(没有关闭/可扣除) – 2010-11-10 19:27:46

+0

我认为它不完整。 – yogsma 2010-11-10 19:32:15

+0

您的XML格式正确,但您有混合内容,即Item类型为Deductible的Item元素包含文本和其他Item元素。那是故意的吗? – corriganjc 2010-11-10 19:40:33

回答

3

如果根标签是<Item type="Deductible" ...你可以做doc.getDocumentElement().getChildNodes().item(0).getNodeValue();

否则,您可以检查type属性VAL用于检测从getElementsByTagName("Item");获得的节点列表中的Item元素。

我会使用Java(1.5) XPath API来选择Item/@type='Deductible'元素。

+0

doc.getDocumentElement()。getTextContent();仍然会获得所有文本,因为带有属性deductible的Item包含其他Item元素。他们的文本也属于Item [@ type ='Deductible']。 – corriganjc 2010-11-10 19:48:34

+0

@corrganjc:谢谢,修正。 – khachik 2010-11-10 19:52:33