使用DOMParser解析包含HTML字符串的XML文件

时间:2014-07-21 20:11:37

标签: java html xml domparser

我正在尝试使用DOMParser解析带有HTML字符串的XML文件。问题是getTextContent()方法只获取文本,但不获取其中的任何HTML标记。我希望字符串可以原样返回,而不是解析后的版本。我搜索了整个网络,但找不到任何可以帮助我的东西。顺便说一句。我不能对HTML字符串进行任何更改,因为大约有500个文件存在超过100k的字符串。

Test.xml文件

<?xml version="1.0" encoding="iso-8859-1"?>
<UserDetails xml:lang="en">
    <UserMessage ID="TestID">Text goes here. <span style="color:#DF0000"><b>Bold Text goes here.</b> </span>More Text.</UserMessage>
</UserDetails>

Java模块

import com.sun.org.apache.xerces.internal.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class TestAll
{
    public static void main(String[] args)
    {
        try
        {
            File file = new File("C:/Users/Administrator/Desktop/Test.xml");

            DOMParser fileParser = new DOMParser();
            InputStream in = new FileInputStream(file);
            InputSource source = new InputSource(in);
            fileParser.parse(source);
            in.close();
            Document newFileDoc = fileParser.getDocument();
            NodeList nodes = newFileDoc.getChildNodes();
            for (int i = 0; i < nodes.getLength(); i++)
            {
                Node node = nodes.item(i);
                NodeList userMessages = node.getChildNodes();
                for (int j = 0; j < userMessages.getLength(); j++)
                {
                    Node userMessage = userMessages.item(j);
                    if (userMessage.getNodeType() == Node.ELEMENT_NODE)
                    {
                        String text = userMessage.getTextContent();
                        System.out.println(text);
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace(); 
        }
    }

}

实际输出

  

文字在这里。 粗体文字在这里。更多文字。

预期产出

Text goes here. <span style="color:#DF0000"><b>Bold Text goes here.</b> </span>More Text.

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试将文字放在

之间
<xmp> </xmp> 

标签,其间的所有内容都将按原样显示

答案 1 :(得分:0)

您的userMessage变量是DOM节点。

如果要将DOM节点转换为HTML字符串,请查看此处:

How do I convert a org.w3c.dom.Document object to a String?