gpt4 book ai didi

java - 保存到文件后编辑的 XML 内容没有改变

转载 作者:行者123 更新时间:2023-12-02 03:34:22 25 4
gpt4 key购买 nike

我正在解析 XML 文件以修改可能的所有值并保存。但保存后却没有任何变化。我做错了什么或者我可以做得更好吗?

我的目标是解析 XML 文件中的所有内容,检查所有包含特殊字符的字符串并将其替换为转义字符。请不要问为什么,接收 XML 文档的解析器不会处理这些字符,所以我别无选择,只能转义它们。

String xmlfile = FileUtils.readFileToString(new File(filepath));


DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new InputSource(new StringReader(xmlfile)));

NodeList nodeList = doc.getElementsByTagName("*");

for (int i = 0; i < nodeList.getLength(); i++)
{
Node currentNode = nodeList.item(i);

if (currentNode.getNodeType() == Node.ELEMENT_NODE)
{
if (currentNode.getFirstChild()==null)
{}
else {currentNode.setNodeValue(StringEscapeUtils.escapeXml(currentNode.getFirstChild().getNodeValue())); }
}
}


TransformerFactory transformerFactory = TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);

StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);


FileOutputStream fop = null;
File file;

file = File.createTempFile("escapedXML"+UUID.randomUUID(), ".xml");

fop = new FileOutputStream(file);

String xmlString = writer.toString();
byte[] contentInBytes = xmlString.getBytes();

fop.write(contentInBytes);
fop.flush();
fop.close();

最佳答案

您正在更新 Element 节点,该操作无效。此外,我认为以下内容更强大,因为它将迭代所有文本节点,而不仅仅是第一个。

for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
Node child = currentNode.getFirstChild();
while(child != null) {
if (child.getNodeType() == Node.TEXT_NODE) {
child.setTextContent(StringEscapeUtils.escapeXml(child.getNodeValue()));
}
child = child.getNextSibling();
}
}
}

关于java - 保存到文件后编辑的 XML 内容没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616610/

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