2013-03-26 58 views
0

下,我有這樣一個XML文件:不能提取子節點的名稱的節點

<book> 
    <chapter name="chap1"> 
     <section name="c1sec1"> 
      <paragraph name="title1">sample</paragraph> 
     </section> 
     <section name="c1sec2"> 
      <paragraph name="title2">sample1</paragraph> 
     </section> 
    </chapter> 
    <chapter name="chap2"> 
     <section name="c2sec1"> 
      <paragraph name="title3">sample2</paragraph> 
     </section> 
    </chapter> 
    <chapter name="chap3"> 
     <section name="c3sec1"> 
      <paragraph name="title4">sample3</paragraph> 
     </section> 
    </chapter> 
</book> 

我想從具體章節中提取的部分。從「是chap1」假設,輸出應該是這樣的:

c1sec1 
c1sec2 

我寫了下面的一段代碼來實現這一目標:

NodeList nodeList = doc.getElementsByTagName("chapter"); 
for (int i = 0; i < nodeList.getLength(); i++) { 
    Node n = nodeList.item(i); 
    NamedNodeMap m = n.getAttributes(); 
    if(m.getNamedItem("name").getTextContent() == "chap1") 
    { 
     System.out.println(n.getFirstChild().getNodeValue()); 
    } 
} 

我要去哪裏錯了?

+0

你得到什麼輸出?它是空的嗎? – Pace 2013-03-26 11:25:01

回答

0

嘗試的m.getNamedItem("name").getNodeValue()代替m.getNamedItem("name").getTextContent()

+0

這是錯誤的解決方案,getNodeValue爲一個元素返回null – RonK 2013-03-26 13:09:36

+0

幸運的是,getAttributes返回一個包含屬性而不是元素的NamedNodeMap。 – Pace 2013-03-26 13:18:29

+0

你是對的 - 沒有注意到:) – RonK 2013-03-26 16:06:56

1

我會用更簡單的方法getAttribute()提示:

NodeList nodeList = doc.getElementsByTagName("chapter"); 
for (int i = 0; i < nodeList.getLength(); i++) { 
    Element el = (Element)nodeList.item(i); 
    if (el.getAttribute("name").equals("chap1")) 
    { 
     System.out.println("Found chap1"); 
    } 
} 

然後您就需要類似的代碼從章提取部分的名稱。

2

您的問題的根本原因是使用==比較字符串,而不是等於