在Java中按标签分割XML字符串

13 浏览
0 Comments

在Java中按标签分割XML字符串

我如何将一个xml字符串按标签拆分成不同的xml字符串?

假设我有以下XML。我如何得到一个包含

tag1及其值,

tag2及其值,

tag3及其值的xml字符串?

 
 
    //其他标签和tag1的值 
    
    
      

我拆分XML是因为当我为xml字符串创建XSD时,它只为tag1创建了XSD,因为其他标签与tag1具有相同的命名空间。

0
0 Comments

在Java中,使用SAXParser来将XML解析为Java对象是一种常见的做法。通过这种方法,我们可以轻松地从XML中获取所需的数据。

在解析XML之前,我们首先需要使用SAXParser将XML转换为Java对象。SAXParser是一种基于事件驱动的解析器,它逐行读取XML文件并触发相应的事件。我们可以实现自己的事件处理程序,根据需要来处理这些事件。

下面是使用SAXParser解析XML的示例代码:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class XMLParser {
    public static void main(String[] args) {
        try {
            // 创建SAXParserFactory实例
            SAXParserFactory factory = SAXParserFactory.newInstance();
            // 创建SAXParser实例
            SAXParser saxParser = factory.newSAXParser();
            // 创建自定义的事件处理程序
            MyHandler handler = new MyHandler();
            // 解析XML文件
            saxParser.parse("file.xml", handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了一个SAXParserFactory实例,然后使用它创建一个SAXParser实例。接下来,我们创建了一个自定义的事件处理程序MyHandler,并将其传递给saxParser.parse()方法。最后,我们调用parse()方法来解析XML文件。

下面是一个简单的MyHandler类的示例代码,用于处理XML事件:

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyHandler extends DefaultHandler {
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        // 处理元素开始事件
    }
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        // 处理元素结束事件
    }
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        // 处理元素内容事件
    }
}

在上面的代码中,我们继承了DefaultHandler类,并重写了startElement()、endElement()和characters()方法来处理XML事件。根据需要,我们可以在这些方法中获取所需的数据。

通过使用SAXParser和自定义的事件处理程序,我们可以轻松地从XML中获取所需的数据。这种方法比DOM解析更加高效,特别适用于处理大型的XML文件。在实际开发中,我们可以根据需要对事件处理程序进行扩展,以满足各种不同的需求。

0
0 Comments

问题的出现原因:

在处理XML数据时,需要对XML字符串进行拆分,以获取标签和值。然而,对于标准的Java XML解析器,没有直接提供将XML字符串按标签拆分的方法。

解决方法:

可以通过使用Java提供的内置XML解析工具来解析XML字符串,并使用递归的方式遍历XML树,将每个节点的标签和值提取出来。

代码示例:

import org.w3c.dom.*;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
public class XMLParser {
    public static void main(String[] args) {
        String xmlString = "value1value2";
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            InputSource inputSource = new InputSource(new StringReader(xmlString));
            Document document = builder.parse(inputSource);
            printTagsAndValues(document.getDocumentElement());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void printTagsAndValues(Node node) {
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            System.out.println("Tag: " + node.getNodeName());
            System.out.println("Value: " + node.getTextContent());
        }
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node childNode = nodeList.item(i);
            printTagsAndValues(childNode);
        }
    }
}

运行以上代码,将输出XML字符串中每个标签的名称和对应的值。

参考链接:

- [Stack Overflow: Getting tag as well as the values xml](http://stackoverflow.com/questions/39151102/39151192#39151192)

0
0 Comments

在这段代码中,使用了XPath和vtd-xml来对XML字符串进行拆分。这个问题的出现原因是需要将一个大的XML字符串拆分成多个小的XML字符串。

解决方法是使用vtd-xml库和XPath来实现拆分。首先,通过VTDGen类解析XML文件,然后获取VTDNav类的实例,该实例包含了XML的导航信息。接下来,使用AutoPilot类来设置XPath表达式,选择要拆分的标签。在循环中,使用evalXPath方法来执行XPath表达式,并将返回的结果保存在变量i中。如果结果不等于-1,表示找到了符合XPath表达式的标签,然后将该标签的内容写入到输出文件中。

以上就是解决这个问题的代码实现。通过使用XPath和vtd-xml库,我们可以方便地将一个大的XML字符串拆分成多个小的XML字符串。这对于处理大型XML文件或者需要对XML进行分片处理的场景非常有用。

0