【问题标题】:How to get Key value pair from XML document Java如何从 XML 文档 Java 中获取键值对
【发布时间】:2015-08-18 18:43:33
【问题描述】:

我有一个 XML 文档,我想从中检索该 XML 文档的键和值。但是我无法同时获得两者,我意识到我应该使用 Map 的数据类型,但我不确定如何实现这一点。

示例:

我有以下 XML 文件:

<?xml version="1.0"?>
    <config>
        <Request name="ValidateEmailRequest">
            <requestqueue>emailrequest</requestqueue>
            <responsequeue>emailresponse</responsequeue>
        </Request>
        <Request name="CleanEmail">
            <requestqueue>Cleanrequest</requestqueue>
            <responsequeue>Cleanresponse</responsequeue>
        </Request>
    </config>

我想写一个方法来解析这个文件并返回一个XML的节点(键)和值(值)的键值对。

如[requestqueue,emailrequest] [responsequeue,emailresponse]等...

我目前拥有的:

public Map<String, String> parseXML(File f) throws Exception {

    String xml = FileUtils.readFileToString(f);

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();

    Document document = builder.parse(new InputSource(new StringReader(xml)));
    Element rootElement = document.getDocumentElement();

    // I'm stuck...

    return null;
}

任何帮助或帮助将不胜感激,谢谢。

编辑:

我做了一些研究,发现了一些可以打印值但只有一个键“返回”的东西

@Test
public void testConverter() throws Exception {
    String xml = ("xmlDir/request.xml");
    Map<String,String> map = convertNodesFromXml(xml);

    for(Map.Entry<String, String> entry: map.entrySet()) {
        String key = entry.getKey(); 
        String value = entry.getValue();

        logger.debug("Key: "+key+" Value: "+value);
    }

}



public static Map<String, String> convertNodesFromXml(String xml) throws Exception {

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document = db.parse(xml);

    Element doc = document.getDocumentElement();
    logger.debug(doc.getFirstChild());

    return createMap(document.getDocumentElement());
}

public static Map<String, String> createMap(Node node) {
    Map<String, String> map = new HashMap<String, String>();
    NodeList nodeList = node.getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node currentNode = nodeList.item(i);
        if (currentNode.hasAttributes()) {
            for (int j = 0; j < currentNode.getAttributes().getLength(); j++) {
                Node item = currentNode.getAttributes().item(i);
                map.put(item.getNodeName(), item.getTextContent());
            }
        }
        if (node.getFirstChild() != null && node.getFirstChild().getNodeType() == Node.ELEMENT_NODE) {
            map.putAll(createMap(currentNode));
        } else if (node.getFirstChild().getNodeType() == Node.TEXT_NODE) {
            map.put(node.getLocalName(), node.getTextContent());
        }
    }
    return map;
}

输出:

2015-08-18 15:01:31,651 : Key: Return Value: 



    136
    125
    SEPTEMBER
    250


    OCTOBER
    250
    125
    136


    136
    125
    250
    APRIL


    136
    JUNE
    250
    125


    MAY
    136
    250
    125


    136
    250
    125
    JANUARY


    136
    125
    250
    MARCH


    250
    AUGUST
    136
    125

  3000

    136
    125
    250
    DECEMBER


    136
    JULY
    125
    250


    136
    125
    FEBRUARY
    250

  1500
  555-11-2222

    125
    136
    NOVEMBER
    250

  1632


  1
  22000
  1
  22000




  1970-01-01


  555-11-2222


      CA

【问题讨论】:

  • JAX-B 运行良好。它可能不如其他解析器快,但可以立即启动并运行。

标签: java xml xml-parsing


【解决方案1】:

函数 getChildNodes() https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#getChildNodes() 返回一个包含该节点子节点的节点列表。也许您利用该功能来遍历您的节点树。 或者,您可以使用像 Jaxb 这样的框架,将您的 xml 映射到 Java Pojos。有了那个 pojo,你就可以构建你的地图了

【讨论】:

  • 请查看我的编辑,我能够检索值而不是键。缺少什么?
【解决方案2】:

有没有看java documentation

首先我会尝试

NodeList nodeList = rootElement.getElementsByTagName("equestqueue");

稍后我会遍历这个 List(也看看 api)并找到属性、值等...

【讨论】:

  • 请查看我的编辑,我能够检索值而不是键。缺少什么?
猜你喜欢
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多