2010-11-10 67 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