java - 使用 SAX 或 STAX 进行 XML 处理

标签 java xml sax stax

我是 JAVA 编程和处理 XML 文件的解析器的新手,现在我需要 JAVA 程序来读取包含 .. 标签的大 XML 文件。输入示例如下。

我以前的 xml 文件是 .

<employees>
    <Employee id="1">
        <age>29</age>
        <name>Pankaj</name>
        <gender>Male</gender>
        <role>Java Developer</role>
    </Employee>
    <Employee id="2">
        <age>35</age>
        <name>Lisa</name>
        <gender>Female</gender>
        <role>CEO</role>
    </Employee>
</employee>

New `Input.xml`:

    <row>
    <Name>Filename1</Name>
    </row>
    <row>
    <Name>Filename2</Name>
    </row>
    <row>
    <Name>Filename3</Name>
    </row>

我需要首先输出 <row> </row>作为一个单一的.xml文件名为 filename1.xml 的文件第二个<row>..</row>filename2.xml等等。

I have tried something like:

Using this code we can split the xml document which contains below format.But this code not supported by new aim that was mentioned in the above question.my source code is,



import java.io.File;
import java.io.FileReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;


public class Big {

    public static void main(String[] args) throws Exception  {
        XMLInputFactory xif = XMLInputFactory.newInstance();            
        XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("input.xml"));
        xsr.nextTag();
         TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = tf.newTransformer();
        while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {       

            File file = new File("output1/" +  xsr.getAttributeValue(null,"id") + ".xml");
            t.transform(new StAXSource(xsr), new StreamResult(file));

        }

    }

} 

my previous xml file is .

<employees>
    <Employee id="1">
        <age>29</age>
        <name>Pankaj</name>
        <gender>Male</gender>
        <role>Java Developer</role>
    </Employee>
    <Employee id="2">
        <age>35</age>
        <name>Lisa</name>
        <gender>Female</gender>
        <role>CEO</role>
    </Employee>
</employee>

它给出的输出为 1.xml,2.xml...但现在我的目标不同了,我的文件名应该是标签内的内容。

我应该修改源代码以获得我的新目标的结果吗?如果可能的话,您可以发送修改后的源代码吗???我使用 STAX 解析器

您能指导我们吗?

谢谢

索米娅

最佳答案

替换

xsr.getAttributeValue(null,"id")

xsr.getElementText()

关于java - 使用 SAX 或 STAX 进行 XML 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548436/

相关文章:

java - 从Java中的另一个线程访问变量

php - 与 XPath 等效的 Mysql like 子句

java - SAXParserFactory 是否容易受到 XXE 攻击?

xml - 当先前的节点值条件为真时获取 XML 节点值(不循环)

ruby-on-rails - Ruby on Rails - 在临时文件中存储 XML

java - SAXBuilder jdom 给出异常

java - 我们如何自定义 STAX 或 SAX 的 XML 解析错误?

java EasyMock 忽略从 TestedClass 的方法对对象的调用

java - NullPointerException,多维数组

java - 为什么这个 if 语句会在这个 While 循环中触发?