【问题标题】:Having difficulty parsing nested tags xml java难以解析嵌套标签xml java
【发布时间】:2013-06-11 14:45:10
【问题描述】:

我正在从字典 api 解析定义。我有这行xml

<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元素中有多个嵌套标签

【问题讨论】:

  • 你为什么使用你的“getValue”方法,你不能使用 def.getElementsByTagName("dt") 来获取整个“dt”元素?
  • 否,因为它返回一个节点列表
  • def.getElementsByTagName("dt").item(0)?

标签: java xml dom


【解决方案1】:

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

添加我的 cmets 这给出了:

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

结果:

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

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多