获取标签和值? XML [重复]
Posted
技术标签:
【中文标题】获取标签和值? XML [重复]【英文标题】:Getting tag as well as the values? XML [duplicate] 【发布时间】:2017-01-02 05:30:28 【问题描述】:我将以下 XML 作为字符串传递。
<?xml version="1.0"?>
<tagMain>
<tag1>
<a>
<a>1</a>
<b>2</b>
<c>3</c>
<d>4</d>
</a>
<b>5</b>
<c>6</c>
<d>7</d>
<e>8</e>
<f>9</f>
</tag1>
<tag2>
<r>
<r1>10</r1>
<r2>11</r2>
<r3>12</r3>
<r4>13</r4>
</r>
<b>14</b>
<c>15</c>
<d>16</d>
<e>17</e>
<f>18</f>
</tag2>
<tag3>
<a>
<a>1m</a>
<b>2m</b>
<c>3m</c>
<d>4m</d>
</a>
<b>5m</b>
<c>6m</c>
<d>7m</d>
<e>8m</e>
<f>9m</f>
</tag3>
</tagMain>
我调用下面的方法来获取每个标签之间的值。
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 = "<tag1><a>
<a>1</a>
<b>2</b>
<c>3</c>
<d>4</d>
</a>
<b>5</b>
<c>6</c>
<d>7</d>
<e>8</e>
<f>9</f>
</tag1>";
【问题讨论】:
【参考方案1】:我不确定这个功能是否已经存在,但你可以编写一个简单的辅助方法:
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("</" + tag + ">");
return sb.toString();
然后这样称呼它:
String tag1 = getWrappedTag("tag1", doc);
【讨论】:
感谢您的输入,但我正在尝试获取每个标签,其中包含 tag1、tag2、tag3 的值。这将执行以下操作:使用LSSerializer
(http://docs.oracle.com/javase/8/docs/api/index.html?org/w3c/dom/ls/LSSerializer.html) 或从TransformerFactory
创建默认Transformer
,然后您可以使用它来序列化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 来收集结果。
【讨论】:
【参考方案3】:这是一段非常简单的 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();
【讨论】:
【参考方案4】:感谢大家的意见。
因为,每次调用该方法时,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, "<tag1>", "<tag2>"));
String tag2 = split(XMLString, "<tag2>", "<tag3>"));
String tag3 = split(XMLString, "<tag3>", "<tag4>"));
【讨论】:
以上是关于获取标签和值? XML [重复]的主要内容,如果未能解决你的问题,请参考以下文章