Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取标签和值?XML_Java_Xml_Split_Getelementsbytagname - Fatal编程技术网

Java 获取标签和值?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作为字符串传递

<?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您需要在包装的标记中进行一点循环或递归,然后此方法才能工作。