【问题标题】:Tag names are missing in the XML parsed except the root element除根元素外,解析的 XML 中缺少标记名称
【发布时间】:2018-05-18 18:13:39
【问题描述】:

我正在读取一个动态 XML 文件(没有任何已知结构)并将相关的标签名称和值放入哈希映射(例如:metadata<tagName, Value>)。

我的问题是,我无法获取 tagName,但它只添加了根 tagName 和整个 xml 的所有值。

我的 XML 是:

<?xml version="1.0" encoding="UTF-8"?>
            <form kwf="VARA">
                <sec1>
                    <docID>2d2c5bf209b79d8b1a1f840ce4ce4030e66a76d6</docID>
                    <qrCode>xx.jpg</qrCode>
                    <title>NOOO FORM NAME</title>
                    <ELO_VARAFNAME>NO</ELO_VARAFNAME>
                    <ELO_VARALNAME>NAME</ELO_VARALNAME>   
                    <ELO_VARAEMAIL>noname@gmail.com</ELO_VARAEMAIL>
                    <ELO_VARAORBEONDOCID>2d2c5bf209b79d8b1a1f840ce4ce4030e66a76d6</ELO_VARAORBEONDOCID>
                </sec1>
            </form>

我的代码是:

public static Map<String,String> getMetaDataFromOrbeonXML(File fXmlFile) throws SAXException, ParserConfigurationException, IOException
  {
    Map metaData = new HashMap();
    String formName="";
    String docID = "";
    try {

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

       doc.getDocumentElement().normalize();

       System.out.println("Root element :" +        doc.getDocumentElement().getNodeName());

        NodeList nList = doc.getElementsByTagName("form");

    for (int temp = 0; temp < nList.getLength(); temp++) {

        Node nNode = nList.item(temp);
        System.out.println("\nCurrent Element :" + nNode.getNodeName());

        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
              Element eElement = (Element) nNode;

             docID = eElement.getElementsByTagName("docID").item(0).getTextContent();
                metaData.put("docID", docID);
                metaData.put("appName", APP_NAME);
                metaData.put(eElement.getTagName(), eElement.getTextContent());

                System.out.println("META DATA MAP: "+ metaData.toString());

        }
      }

    } catch (Exception e) {
        e.printStackTrace();
    }

      return metaData;
 }

输出是:

{form=                  2d2c5bf209b79d8b1a1f840ce4ce4030e66a76d6
                        xx.jpg
                        NOOO FORM NAME
                        NO
                        NAME   
                        noname@gmail.com
                        2d2c5bf209b79d8b1a1f840ce4ce4030e66a76d6

                , docID=2d2c5bf209b79d8b1a1f840ce4ce4030e66a76d6, appName=VIRGINAUSI, formName=AITSLForm}

地图中除了根元素外缺少标记名称。请帮忙!

【问题讨论】:

    标签: java xml sax


    【解决方案1】:

    上面的代码正确地在地图中添加了 2 个条目。第一个条目将元素Form 映射到它的文本内容(这是它所有后代节点的文本内容的集合)。

    如果您想访问后代节点,您需要使用 eElement.getChildNodes() 并遍历返回的 NodeList。

    这可能有用: Java: Most efficient method to iterate over all elements in a org.w3c.dom.Document?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2021-01-05
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多