【问题标题】:How to parse this XML file into a MySQL table?如何将此 XML 文件解析为 MySQL 表?
【发布时间】:2013-10-14 17:28:11
【问题描述】:

我正在尝试通过如下结构的 XML 文件进行解析。我想要实现的是将其转换为要在 MySQL 中使用的表格式。因此,例如,在这种情况下,我将有一个这样的表,其列格式具有以下示例行:

name | industry_permid | trbc_code | mnemonic
Juvenile Products & Accessories | 4294951612 | 5320501015 | NULL
Life & Health Insurance | 4294952862 | 55301030| LINS

我的 XML 文件:

<conceptSet>
    <concept>
      <conceptId qcode="B:1389" /> 
      <type qcode="cptType:2" /> 
      <sameAs qcode="P:4294951612" /> 
      <name role="nameRole:main" xml:lang="en">Juvenile Products & Accessories</name> 
      <broader qcode="B:199" /> 
      <rtr:stage current="stg:live" /> 
      <sameAs qcode="TRBC-2012-Hierarchical-ID:5320501015" /> 
    </concept>
    <concept>
      <conceptId qcode="B:139" /> 
      <type qcode="cptType:2" /> 
      <sameAs qcode="P:4294952862" /> 
      <name role="nameRole:mnemonic" xml:lang="en">LINS</name> 
      <name role="nameRole:main" xml:lang="en">Life & Health Insurance</name> 
      <broader qcode="B:136" /> 
      <rtr:stage current="stg:live" /> 
      <sameAs qcode="TRBC-2012-Hierarchical-ID:55301030" /> 
    </concept>
</conceptSet>

问题是,每当我尝试访问此 XML 树中的元素时,我只会获取带有名称标签的元素。我不知道如何在没有像 qcodes 之类的标签的情况下访问元素。如果有帮助,我将使用默认的 Java XML 解析器。

这是我到目前为止的代码,每次我尝试获取属性时都会打印出 null。

    File mapping = new File("blah.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(mapping);
    doc.getDocumentElement().normalize();

    NodeList nodeList = doc.getElementsByTagName("concept");

    for (int i = 0; i < nodeList.getLength(); i++) {
        System.out.println(nodeList.item(i).getAttributes().getNamedItem("qcode"));
    }

【问题讨论】:

    标签: java sql xml


    【解决方案1】:

    在您的 for 循环中,nodeList.item(i) 是一个 concept 元素。因此,您尝试从 concept 元素中检索 qcode 属性,但它没有。

    你可以遍历concept元素的子节点来获取你需要的元素,f.e.:

    for (int i = 0; i < nodeList.getLength(); i++) {
        NodeList children = nodeList.item(i).getChildNodes();
        for (int j = 0; j < children.getLength(); j ++) {
            System.out.println(children.item(i).getAttributes().getNamedItem("qcode"));
        }
    }
    

    或者您可以直接使用 XPath 检索您需要的节点,例如,参见 this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多