【问题标题】:how to find the node which has child node while parsing XML file using DOM parser in java如何在java中使用DOM解析器解析XML文件时找到具有子节点的节点
【发布时间】:2016-10-01 20:25:23
【问题描述】:

我想解析一个xml文档并转换成json。 我在查找哪个节点有子节点和哪个节点没有时遇到问题。

例子:

<Bank>
    <Account>
        <Id>1001</Id>
        <Name>Jack Robinson</Name>
       <Amt>10000</Amt>
    </Account>
</Bank>

在这个 xml 文件中,我想找到第一个 Bank 节点有一个子元素,即 Account ,就像 Account 节点有子节点,即 Id,Name,Amt。 但是Id、Name和Amt节点没有子节点,所以我想像这样找到哪个节点有子节点,哪个节点没有?

我正在尝试使用 node.hasChildNodes() 方法,但它会为每个节点返回 true。

请帮我解决这个问题...

【问题讨论】:

    标签: java xml xml-parsing domparser


    【解决方案1】:

    node.hasChildNodes() 返回 true,因为它发现空文本元素是子元素。
    因此,在您的情况下,Bank 有子 empty text,然后是 Account
    一种解决方案是从 XML 中删除格式化元素,然后对其进行解析。 您可以使用 node.getNodeType() == Node.ELEMENT_NODE 来检查节点是空文本还是元素节点。

    【讨论】:

    • 是的,没错。您能指导我如何删除 xml 空格吗?
    • 您可以在测试子节点之前调用 node.normalize()。另一种解决方案是调用 node.getChildNodes() 并检查任何返回的节点是否属于 Node.ELEMENT_NODE 类型。两种情况都有效。
    • 谢谢兄弟。它工作得很好。我面临的唯一一个问题是如何识别元素正在结束,即在这种情况下 是结束标签,我想识别那个结束标签,以便我可以编写 json 结束对象......给我任何提示或任何解决方案?
    【解决方案2】:

    你可以试试

    NodeList iDNodes = (Account).getElementsByTagName("Id");
    int lengthofID = value1Nodes.getLength();
    
    if(lengthofID > 0){
     //..proceed
    }
    

    或者类似的是

    doc.getChildNodes().item(0).getChildNodes().getLength();
    

    【讨论】:

    • getElementByTagName 方法返回具有给定名称的所有元素的 NodeList,我不想要这个。我要为孩子鉴定。
    • child 在其节点中也是一个Element。也许第二个例子会有所帮助doc.getChildNodes().item(0).getChildNodes().getLength();
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多