如何使用Java替换XML文档中的文本
如何使用Java替换XML文档中的文本 资料来源:如何使用Java替换XML文档中的文本,java,xml,Java,Xml,如何使用Java替换XML文档中的文本 资料来源: <body> <title>Home Owners Agreement</title> <p>The <b>good</b> thing about a Home Owners Agreement is that...</p> </body> 上面代码的问题是p的所有子节点都丢失了。这里的问题是您实际上想要替换节点,而不仅仅是文本。 您可以遍历当前
<body>
<title>Home Owners Agreement</title>
<p>The <b>good</b> thing about a Home Owners Agreement is that...</p>
</body>
上面代码的问题是
p
的所有子节点都丢失了。这里的问题是您实际上想要替换节点,而不仅仅是文本。
您可以遍历当前节点的子节点,然后将它们再次添加到新节点。然后替换节点
但是它需要大量的工作,并且对文档结构非常敏感。例如,如果有人将您的
标记包装为div
,则您必须更改解析
此外,从CPU和内存利用率的角度来看,这种方法非常无效:您必须解析整个文档以更改其中的几个单词
我的建议如下:尝试使用正则表达式。在大多数情况下,它足够坚固。例如,类似于
xml.replaceFirst((*?)”,“HOA的好处是…”
将起作用(至少在你的情况下) 好吧,我找到了解决办法 关键是您不想替换实际节点的文本。实际上只有文本的子表示。我能够用这段代码完成我所需要的:
private static void replace(Node root){
if (root.getNodeType() == root.TEXT_NODE){
root.setTextContent(root.getTextContent().replace("Home Owners Agreement", "HMO"));
}
for (int i = 0; i < root.getChildNodes().getLength(); i++){
outputTextOfNode(root.getChildNodes().item(i));
}
}
私有静态无效替换(节点根){
if(root.getNodeType()==root.TEXT\u节点){
setextcontent(root.getTextContent().replace(“房屋所有者协议”、“HMO”);
}
对于(int i=0;i
谢谢。正则表达式是可能的,但是我的例子从我实际需要做的事情简化了。我替换的内容取决于各种嵌套元素。通过替换System.Xml.XmlNode.InnerXml,我可以很容易地使用C完成替换
replaceText(string term, string replaceWith, org.w3c.dom.Node p){
p.setTextContent(p.getTextContent().replace(term, replaceWith));
}
private static void replace(Node root){
if (root.getNodeType() == root.TEXT_NODE){
root.setTextContent(root.getTextContent().replace("Home Owners Agreement", "HMO"));
}
for (int i = 0; i < root.getChildNodes().getLength(); i++){
outputTextOfNode(root.getChildNodes().item(i));
}
}