Java相当于System.Xml.XmlNode.InnerXml

时间:2011-10-06 13:24:07

标签: java .net

是否存在.NET的System.Xml.XmlNode.InnerXml的等价物?

我需要替换XML文档中的一些单词。

我无法使用Java的org.w3c.dom.Node.setTextContent(),因为这会删除XML节点。

谢谢!

来源:

<body>
<title>Home Owners Agreement</title>
<p>The <b>good</b> thing about a Home Owners Agreement is that...</p>
</body>

期望的输出:

<body>
<title>Home Owners Agreement</title>
<p>The <b>good</b> thing about a HOA is that...</p>
</body>

我只希望替换<p>标签中的文字。我尝试了以下方法:

replaceText(string term, string replaceWith, org.w3c.dom.Node p){
       p.setTextContent(p.getTextContent().replace(term, replaceWith));

}

上述代码的问题是p的所有子节点都丢失了。

2 个答案:

答案 0 :(得分:0)

您可以查看jdom

document.getRootElement().getChild("ELEMENT1").setText("replacement text");

这样的东西

在将文档转换为JDOM文档时,您需要做一些工作,但有些适配器可以让您轻松完成。或者,如果XML位于文件中,您只需使用JDOM Builder类来创建要操作的DOM。 `

答案 1 :(得分:0)

好的,我找到了解决方案。

关键是您不想替换实际节点的文本。实际上只有文本的子代表。我能够用这段代码完成我需要的东西:

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));
    }
}