如何将xml节点重命名为html标记

时间:2011-02-10 04:53:31

标签: java html xml

假设我有一个包含xml数据的Java String:

String content = "<abc> Hello <mark> World </mark> </abc>";

现在,我试图将此String作为文本呈现在网页上,并高亮显示/标记单词“World”。标签“abc”可能会动态更改,那么我是否可以使用Java重命名String中最外层的xml标记?

我想将上面的String转换为如下所示的格式:

String content = "<i> Hello <mark> World </mark> </i>";

现在,我可以使用新的String来设置html内容并以斜体显示文本并突出显示World。

谢谢, 索尼

PS:我在BaseX xml数据库中使用xquery文件。 String内容本质上是xquery的结果,它使用ft:extract(),一个提取全文搜索结果的函数。

2 个答案:

答案 0 :(得分:2)

使用正则表达式“解析”XML可能很麻烦。如果您的XML字符串可能比示例中使用的XML字符串更复杂,则应考虑将其作为真正的XML节点进行处理。

String newName = "i";
// parse String as DOM
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(content)));

// modify DOM
doc.renameNode(doc.getDocumentElement(), null, newName);

此代码假定需要重命名的元素始终是最外层的元素,即根元素。

现在该文档是一个DOM树。它可以通过变换器转换回String对象。

// output DOM as String
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter sw = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(doc), new StreamResult(sw));
String italicsContent = sw.toString();

答案 1 :(得分:0)

也许是一个简单的正则表达式?

    String content = "<abc> Sample text <mark> content </mark> </abc>";
    Pattern outerTags = Pattern.compile("^<(\\w+)>(.*)</\\1>$");
    Matcher m = outerTags.matcher(content);
    if (m.matches()) {
        content = "<i>" + m.group(2) + "</i>";
        System.out.println(content);
    }

或者,使用DOM解析器,找到外部标记的子级并打印它们,在所需的标记之前和之后作为字符串