获得标签以及价值观? XML

我将以下XML作为String传递。

    1 2 3 4  5 6 7 8 9    10 11 12 13  14 15 16 17 18    1m 2m 3m 4m  5m 6m 7m 8m 9m   

我调用以下方法,它为每个标记获取值。

 public static void SplitXml(String xml) throws ParserConfigurationException, SAXException, IOException { DocumentBuilder builder = DocumentBuilderFactory .newInstance().newDocumentBuilder(); InputSource src = new InputSource(); src.setCharacterStream(new StringReader(xml)); Document docu = builder.parse(src); String tag1 = docu.getElementsByTagName("tag1").item(0).getTextContent(); String tag2 = docu.getElementsByTagName("tag2").item(0).getTextContent(); String tag3 = docu.getElementsByTagName("tag3").item(0).getTextContent(); } 

当我运行上面的代码时:

 tag1 = "123456789"; tag2 = "101112131415161718"; tag3 = "1m2m3m4m5m6m7m8m9m"; 

现在我回到我的问题,是否有一种方法可以获得标签以及类似内部的值,例如每个标签:

 tag1 = " 1 2 3 4  5 6 7 8 9 "; 

要么使用LSSerializerhttp://docs.oracle.com/javase/8/docs/api/index.html?org/w3c/dom/ls/LSSerializer.html ),要么从TransformerFactory创建默认的TransformerFactory ,然后就可以了使用它来序列化DOM节点,将DOMSource传递给transform方法( https://docs.oracle.com/javase/7/docs/api/javax/xml/transform/Transformer.html#transform(javax.xml) .transform.Source,%20javax.xml.transform.Result)和一个收集结果的StringWriter。

我不确定此function是否已存在,但您可以编写一个简单的帮助方法:

 private static String getWrappedTag(String tag, Document doc) { StringBuilder sb = new StringBuilder(); sb.append("<" + tag + ">"); sb.append(doc.getElementsByTagName(tag).item(0).getTextContent()); sb.append(""); return sb.toString(); } 

并称之为:

 String tag1 = getWrappedTag("tag1", doc); 

这是一段非常简单的XPath和VTD-XML代码

 import com.ximpleware.*; import java.io.*; public class splitXML { public static void main(String[] args) throws VTDException, IOException { VTDGen vg = new VTDGen(); if (!vg.parseFile("d:\\xml\\input.xml", false)){ System.out.println("error"); return; } VTDNav vn = vg.getNav(); AutoPilot ap = new AutoPilot(vn); ap.selectXPath("/tagmain/*"); int i=0,n=0; FileOutputStream fos =null; while((i=ap.evalXPath())!=-1){ fos = new FileOutputStream("d:\\xml\\output"+(++n)+".xml"); long l = vn.getElementFragment(); fos.write(vn.getXML().getBytes(), (int)l, (int)(l>>32)); fos.close(); } } } 

谢谢你们的意见。

因为,每次调用该方法时,XML都将具有相同的标记名称,意思是标记1-4。 所以,我采取了这种方法….

  public String split(String xml, String tagName1, String tagName2) { String splitedXML = xml.substring((xml.indexOf(tagName1)), xml.indexOf(tagName2)); return splitedXML; } 

现在我将这个方法称为拆分tag1,tag2,tag3值的方法:

  String tag1 = split(XMLString, "", "")); String tag2 = split(XMLString, "", "")); String tag3 = split(XMLString, "", ""));