2013-06-11 3 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.

А вот мой ПолучитьЗначение код

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(); 
} 

Иногда имеется несколько вложенных тегов в пределах дта элемента

+0

Почему вы используете ваш "* ПолучитьЗначение *" метод, вы не можете использовать ** def.getElementsByTagName ("дт") **, чтобы получить весь элемент «* dt *»? – Pragmateek

+0

нет, потому что возвращает список узлов – Popgalop

+0

def.getElementsByTagName ("dt"). Item (0)? – Pragmateek

ответ

0

смесительных https://stackoverflow.com/a/5948326/145757 и Get 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)); 

С результатом:

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

Надеется, что это помогает ...