XML文档-检查父节点,然后遍历文档

问题描述 投票:0回答:1

我在尝试遍历XML文档时遇到了挑战。请帮助。

  • 对于文件1,我的方法是先检查父节点,然后提取子节点信息。
  • 我现在有2个XML输出,第二个不同于第一个,我检查一个,然后提取必要的信息,但是文档二,我需要提取多个条目
  • 两个文件互不相同
  • 我正在网上跟踪一些示例,它对您有帮助,请您帮助以下两个文档的代码
  • 虽然在调试时我可以检查文档和节点,但是我看到了,但是我正在努力提取信息
  • int length = nlist.getLength(),始终为零/ 0,更改getElementsByTagName返回长度为3。

此代码适用于第一个文档

NodeList nodeList = xmlDocument.getElementsByTagName("add:MemberKey");
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node currentNode = nodeList.item(i);
                if (currentNode.getNodeType() != Node.ELEMENT_NODE)
                    continue;
                Element currentElement = (Element)currentNode;
                String tagValue = null;
                tagValue = getElementValue("add:MemberCID",currentElement);
                System.out.println(tagValue);
            }

这是我的第二份文件

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <bbb:CreateMemberResultAnnotation xmlns:bbb="http://www.google.com">
          <ResultHeader>
            <abc:Version>1.0</abc:Version>
            <abc:ResultNumber>1000</abc:ResultNumber>
            <abc:ResultOutcome>Complete.</abc:ResultOutcome>
            <abc:ResultReason>New Result</abc:ResultReason>
          </ResultHeader>
          <p>
            <bbb:ActivationTime>20200111215217</bbb:ActivationTime>
            <bbb:MemberInst>
              <add:MemberKey>
                <add:MemberID>123458687</add:MemberID>
                <add:MemberSeq>0987654332456</add:MemberSeq>
              </add:MemberKey>
              <add:ActivationTime>20200111215217</add:ActivationTime>
              <add:DeativationTime>20370101000000</add:DeativationTime>
            </bbb:MemberInst>
            <bbb:MemberInst>
              <add:MemberKey>
                <add:MemberID>0987699544</add:MemberID>
                <add:MemberSeq>999999999999999</add:MemberSeq>
              </add:MemberKey>
              <add:ActivationTime>20200111215217</add:ActivationTime>
              <add:DeativationTime>20370101000000</add:DeativationTime>
            </bbb:MemberInst>
            <bbb:MemberInst>
              <add:MemberKey>
                <add:MemberID>4444444444</add:MemberID>
                <add:MemberSeq>4444444444444</add:MemberSeq>
              </add:MemberKey>
              <add:ActivationTime>20200111215217</add:ActivationTime>
              <add:DeativationTime>20370101000000</add:DeativationTime>
            </bbb:MemberInst>
          </CreateMemberResult>
        </bbb:CreateMemberResultAnnotation>
      </soapenv:Body>
    </soapenv:Envelope>

检查我的第二份文件的代码:我正在努力

public static checkMessageType(org.w3c.dom.Document xmlDocument) {
    Element docEle = xmlDocument.getDocumentElement();
    NodeList nlist= docEle.getElementsByTagName("bbb:CreateMemberResultAnnotation");
    int length = nlist.getLength(); // I am getting a 0 length here, 
    List<Element> childElement = new ArrayList<>();
    for (int i = 0; i < nlist.getLength(); i++) {
        //Node node = nlist.item(i).getOwnerDocument().getDocumentElement();
       // if (node instanceof Element) {
           // childElement.add((Element) node);
        if (nlist.item(i).getNodeType() == Node.ELEMENT_NODE) {
            Element el = (Element) nlist.item(i);
            if (el.getNodeName().contains("bbb:MemberInst")) {
                String XMLMemberID = el.getElementsByTagName("add:MemberID").item(0).getTextContent();
                String XMLMemberSeq = el.getElementsByTagName("add:MemberSeq").item(0).getTextContent();
            }
        }
 }
java xml xmldocument
1个回答
0
投票

您的xml是否被解析?第10行的p标签是什么?它没有在任何地方关闭。在第36行也有一个createMemberResult关闭标签,但在此之前没有打开

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <bbb:CreateMemberResultAnnotation xmlns:bbb="http://www.google.com">
      <ResultHeader>
        <abc:Version>1.0</abc:Version>
        <abc:ResultNumber>1000</abc:ResultNumber>
        <abc:ResultOutcome>Complete.</abc:ResultOutcome>
        <abc:ResultReason>New Result</abc:ResultReason>
      </ResultHeader>
        <bbb:ActivationTime>20200111215217</bbb:ActivationTime>
        <bbb:MemberInst>
          <add:MemberKey>
            <add:MemberID>123458687</add:MemberID>
            <add:MemberSeq>0987654332456</add:MemberSeq>
          </add:MemberKey>
          <add:ActivationTime>20200111215217</add:ActivationTime>
          <add:DeativationTime>20370101000000</add:DeativationTime>
        </bbb:MemberInst>
        <bbb:MemberInst>
          <add:MemberKey>
            <add:MemberID>0987699544</add:MemberID>
            <add:MemberSeq>999999999999999</add:MemberSeq>
          </add:MemberKey>
          <add:ActivationTime>20200111215217</add:ActivationTime>
          <add:DeativationTime>20370101000000</add:DeativationTime>
        </bbb:MemberInst>
        <bbb:MemberInst>
          <add:MemberKey>
            <add:MemberID>4444444444</add:MemberID>
            <add:MemberSeq>4444444444444</add:MemberSeq>
          </add:MemberKey>
          <add:ActivationTime>20200111215217</add:ActivationTime>
          <add:DeativationTime>20370101000000</add:DeativationTime>
        </bbb:MemberInst>
    </bbb:CreateMemberResultAnnotation>
  </soapenv:Body>
</soapenv:Envelope>

此测试成功运行:

      @Test
   public void test() throws ParserConfigurationException, SAXException, IOException {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      URL resource = getClass().getResource("/yourxml.xml");
      Document xmlDocument = builder.parse(resource.openStream());
      Element docEle = xmlDocument.getDocumentElement();
      NodeList nlist = docEle.getElementsByTagName("bbb:CreateMemberResultAnnotation");
      int length = nlist.getLength(); // I am getting a 0 length here,
      List<Element> childElement = new ArrayList<>();
      for (int i = 0; i < nlist.getLength(); i++) {
         // Node node = nlist.item(i).getOwnerDocument().getDocumentElement();
         // if (node instanceof Element) {
         // childElement.add((Element) node);
         if (nlist.item(i).getNodeType() == Node.ELEMENT_NODE) {
            Element el = (Element) nlist.item(i);
            if (el.getNodeName().contains("bbb:MemberInst")) {
               String XMLMemberID = el.getElementsByTagName("add:MemberID").item(0).getTextContent();
               String XMLMemberSeq = el.getElementsByTagName("add:MemberSeq").item(0).getTextContent();
            }
         }

      }
   }
© www.soinside.com 2019 - 2024. All rights reserved.