2013-06-11 74 views
1

我解析詞典api中的定義。我有這行xml難以分析嵌套標籤xml java

<dt>:any of a small genus (<it>Apteryx</it>) of flightless New Zealand birds with rudimentary wings, stout legs, a long bill, and grayish brown hairlike plumage</dt> 

我將如何得到dt元素的完整行。我的問題是,當它到達這個部分(Apteryx)時它不起作用,因爲元素中有額外的標籤。我將如何獲得整個dt元素作爲一個整個字符串。這是我目前的代碼。

Element def = (Element) element.getElementsByTagName("def").item(0); 
System.out.println(getValue("dt",def).replaceAll("[^\\p{L}\\p{N} ]", "")); 

其中def是保存dt元素的元素。

這裏是我的getValue代碼

private static String getValue(String tag, Element element) 
{ 
    NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes(); 
    Node node = (Node) nodes.item(0); 
    return node.getNodeValue(); 
} 

有時是DT元素

+0

,你能不能用** def.getElementsByTagName( 「DT」 )**來獲得整個「* dt *」元素? – Pragmateek

+0

否因爲返回節點列表 – Popgalop

+0

def.getElementsByTagName(「dt」)。item(0)? – Pragmateek

回答

0

內的多個嵌套的標籤混合https://stackoverflow.com/a/5948326/145757Get a node's inner XML as String in Java DOM我們得到:

public static String getInnerXml(Node node) 
{ 
    DOMImplementationLS lsImpl = (DOMImplementationLS)node.getOwnerDocument().getImplementation().getFeature("LS", "3.0"); 
    LSSerializer lsSerializer = lsImpl.createLSSerializer(); 
    lsSerializer.getDomConfig().setParameter("xml-declaration", false); 
    NodeList childNodes = node.getChildNodes(); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < childNodes.getLength(); i++) 
    { 
     sb.append(lsSerializer.writeToString(childNodes.item(i))); 
    } 
    return sb.toString(); 
} 

加入我的意見這給:

getInnerXml(document.getElementsByTagName("dt").item(0)); 

有了結果:你爲什麼要使用 「* *的getValue」 方法

:any of a small genus (<it>Apteryx</it>) of flightless New Zealand birds... 

希望這有助於...