有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:如何在xml中传递字符串并获得不同的属性

我有一个XML字符串,我想从中获取所有result元素及其messageId-、designation-和status-成员。我该怎么做

"null
<?xml version="1.0" encoding="UTF-8"?>
<results>
    <result>
        <status>-13</status>
        <messageid></messageid>
        <destination>null</destination>
    </result>
    <result>
        <status>-3</status>
        <messageid></messageid>
        <destination>911234567898</destination>
    </result>
    <result>
        <status>0</status>
        <messageid>146092209473920945</messageid>
        <destination>917827767338</destination>
    </result>
    <result>
        <status>0</status>
        <messageid>116092209473924510</messageid>
        <destination>918527593928</destination>
    </result>
    <result>
        <status>-3</status>
        <messageid></messageid>
        <destination>912345234567</destination>
    </result>
</results>"

请帮我解决这个问题


共 (2) 个答案

  1. # 1 楼答案

    DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource src = new InputSource();
    src.setCharacterStream(new StringReader(xml));//your string xml data
    
    Document doc = builder.parse(src);
    String status= doc.getElementsByTagName("status").item(0).getTextContent();
    String messageid=doc.getElementsByTagName("messageid").item(0).getTextContent();
    String designation=doc.getElementsByTagName("designation").item(0).getTextContent();
    
  2. # 2 楼答案

    首先,您需要在String的开头去掉null部分。可以从String的其余部分创建InputStream(请参见How do I turn a String into a InputStreamReader in java?)。使用DOM解析器解析该流,并使用xpath提取messageid

    String s = "null<?xml version=\"1.0\" encoding=\"UTF-8\"?><results><result><status>-13</status><messageid></messageid><destination>null</destination></result><result><status>-3</status><messageid></messageid><destination>911234567898</destination></result><result><status>0</status><messageid>146092209473920945</messageid><destination>917827767338</destination></result><result><status>0</status><messageid>116092209473924510</messageid><destination>918527593928</destination></result><result><status>-3</status><messageid></messageid><destination>912345234567</destination></result></results>";
    InputStream is = new ByteArrayInputStream(s.substring(s.indexOf("<?xml")).getBytes(StandardCharsets.UTF_8));
    
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    
    Document document = builder.parse(is);
    XPath path = XPathFactory.newInstance().newXPath();
    
    String expression = "//messageid";
    
    NodeList list = (NodeList) path.evaluate(expression, document, XPathConstants.NODESET);
    List<String> messageIds = new ArrayList<>(list.getLength());
    for (int i = 0, l = list.getLength(); i < l; i++) {
        messageIds.add(list.item(i).getTextContent());
    }
    System.out.println(messageIds);