gpt4 book ai didi

java - 如何从 XML 中提取子元素到 Java 中的字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:43 25 4
gpt4 key购买 nike

如果我有一个像这样的 XML 文档

<root>   
<element1>
<child attr1="blah">
<child2>blahblah</child2>
<child>
</element1>
</root>

我想获得一个包含第一个子元素的 XML 字符串。我的输出字符串是

<element1>
<child attr1="blah">
<child2>blahblah</child2>
<child>
</element1>

方法有很多,希望能看到一些思路。我一直在尝试为此使用 Java XML API,但不清楚是否有好的方法可以做到这一点。

谢谢

最佳答案

你是对的,使用标准的 XML API,没有好的方法 - 这里有一个例子(可能是 bug 缠身;它运行,但我很久以前写的)。

import javax.xml.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import java.io.*;

public class Proc
{
public static void main(String[] args) throws Exception
{
//Parse the input document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("in.xml"));

//Set up the transformer to write the output string
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);

//Find the first child node - this could be done with xpath as well
NodeList nl = doc.getDocumentElement().getChildNodes();
DOMSource source = null;
for(int x = 0;x < nl.getLength();x++)
{
Node e = nl.item(x);
if(e instanceof Element)
{
source = new DOMSource(e);
break;
}
}

//Do the transformation and output
transformer.transform(source, result);
System.out.println(sw.toString());
}
}

看起来您可以通过使用 doc.getDocumentElement().getFirstChild() 获得第一个子元素,但问题是如果根元素和子元素之间有任何空格,这将创建一个文本树中的节点,您将获得该节点而不是实际的元素节点。这个程序的输出是:

D:\home\tmp\xml>java Proc
<?xml version="1.0" encoding="UTF-8"?>
<element1>
<child attr1="blah">
<child2>blahblah</child2>
</child>
</element1>

我认为如果不需要,可以取消 xml 版本字符串,但我不确定。如果可能的话,我可能会尝试使用第三方 XML 库。

关于java - 如何从 XML 中提取子元素到 Java 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com