Java 获取标签和值?XML
我将以下XML作为字符串传递Java 获取标签和值?XML,java,xml,split,getelementsbytagname,Java,Xml,Split,Getelementsbytagname,我将以下XML作为字符串传递 <?xml version="1.0"?> <tagMain> <tag1> <a> <a>1</a> <b>2</b> <c>3</c> <d>4</d> </a> <b>5</b&g
<?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>
当我运行上述代码时:
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>";
tag1=”
1.
2.
3.
4.
5.
6.
7.
8.
9
";
我不确定此功能是否已经存在,但您可以编写一个简单的帮助器方法:
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();
}
我不确定此功能是否已经存在,但您可以编写一个简单的帮助器方法:
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();
}
使用
LSSerializer
()或从TransformerFactory
创建默认的Transformer
,然后您可以使用它来序列化DOM节点,将DOMSource
传递给transform
方法(以及一个StringWriter来收集结果。使用LSSerializer
()或者从TransformerFactory
创建一个默认的Transformer
,然后您可以使用它来序列化DOM节点,将DOMSource
传递给transform
方法(和一个StringWriter来收集结果)。这是一段非常简单的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();
}
}
}
这是一段非常简单的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, "<tag1>", "<tag2>"));
String tag2 = split(XMLString, "<tag2>", "<tag3>"));
String tag3 = split(XMLString, "<tag3>", "<tag4>"));
String tag1=split(XMLString,“,”);
String tag2=split(XMLString,“,”);
String tag3=split(XMLString,“,”);
谢谢大家的意见
因为,每次调用该方法时,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>"));
String tag1=split(XMLString,“,”);
String tag2=split(XMLString,“,”);
String tag3=split(XMLString,“,”);
感谢您的输入,但我正在尝试使用tag1、tag2、tag3的值获取每个标记。这将执行以下操作:123456789您需要在包装的标记中进行一点循环或递归,然后此方法才能工作。感谢您的输入,但我正在尝试获取每个标记的tag1、tag2、tag3值。这将执行以下操作:123456789您需要在包装的标记中进行一点循环或递归,然后此方法才能工作。