java - 如何使用java读取xml中的替代标签?

标签 java xml-parsing

我有 xml 文件

<A>
   <A1>
      <A2>Hi</A2>
   </A1>
<A>
<B>
   <B1></B1>
   <B2>100</B2>
</B>
<A>
   <A1>
      <A2>Hello</A2>
   </A1>
<A>
<B>
   <B1>1000</B1>
   <B2></B2>
</B>

同样,这也超过了 10 个街区。现在我的java代码能够逐个读取,先读取所有,然后读取标签。

代码:

public class XMLParse {
    static Document doc;
 public static void main(String argv[]) {
  try {
  File file = new File("/home/dev042/Desktop/xxx.xml");
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  doc = db.parse(file);
  doc.getDocumentElement().normalize();
  System.out.println("Root element " + doc.getDocumentElement().getNodeName());
  NodeList nodeLst = doc.getElementsByTagName("A");
  System.out.println("Information of all Balence Sheet");
 int count = nodeLst.getLength();
 String name;
  for (int s = 0; s < nodeLst.getLength(); s++) {

    Node fstNode = nodeLst.item(s);

    if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
      Element fstElmnt = (Element) fstNode;
      NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("A1");
      for(int i =0; i < fstNmElmntLst.getLength(); i++ )
      {
          Node lst = fstNmElmntLst.item(i);
          if(lst.getNodeType() == Node.ELEMENT_NODE)
          {
              Element fsttravel = (Element) lst;
              NodeList secNmElt = fsttravel.getElementsByTagName("*");
               name = secNmElt.item(0).getTextContent();
               System.out.println("Name : "  + name);
          }
      }
    }

  }
}
   catch (Exception e) {
    e.printStackTrace();
  }
  String amt;
  double amount;
  NodeList nodeLst = doc.getElementsByTagName("B");
   int coun = nodeLst.getLength();
  for (int s = 0; s < nodeLst.getLength(); s++) {
      Node secNode = nodeLst.item(s);

     if (secNode.getNodeType() == Node.ELEMENT_NODE) {
       try
              {
                Element amtval = (Element) secNode;
                NodeList secval = amtval.getElementsByTagName("B1");
                amt = secval.item(0).getTextContent();
                //amount = Double.parseDouble(amt);
                System.out.println("SubAmt :" + amt);

                NodeList lstNmElmntLst = amtval.getElementsByTagName("B2");
                amt = lstNmElmntLst.item(0).getTextContent();
                System.out.println("MainAmt : " +amt);
              }
              catch(Exception ex){
                  ex.printStackTrace();
             }
     }
  }

 }
}

当前输出:

Hi
Hello
100
1000

我想交替读取标签。那么只有我才能映射这些值。我怎样才能交替阅读这些标签。输出应该是这样的

Hi 100
Hello 1000

请帮我摆脱困境。 提前致谢..

最佳答案

我认为您需要仅过滤标签,以便您的解析器仅获取标签。为此,您可以使用 XPath。这是一个示例:

http://www.roseindia.net/tutorials/xPath/java-xpath.shtml

关于java - 如何使用java读取xml中的替代标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409957/

相关文章:

jquery - $.parseXML 不适用于有效的 xml

java - 如何解析来自网站的自定义 XML 样式错误代码响应

c# - 使用 XmlSerializer 反序列化 XML

java - 如何在 Eclipse 中引用外部 JAR 中的类?

java - 使用 hibernate 注释预先加载持久对象

java - 与 char 编码集相关的 XML 解析错误

ios - 如何解析网站文本并在 View 中显示

java - 自动生成站点地图

java - quartz 触发器开始时间早于当前时间

java - 如何从列表<X509Certificate>创建SSLEngine