Java 需要从XML文件中提取纯HTML数据

Java 需要从XML文件中提取纯HTML数据,java,html,xml,parsing,Java,Html,Xml,Parsing,问题是,只要我们有html标记,如下面的contentData标记示例中所述,它具有许多级别的html元素,而预期的输出是 Example XML: <textContent> <contentData> <p><b><i><u>SubStructureElement_RTE_</u></i></b></p> </contentData

问题是,只要我们有html标记,如下面的contentData标记示例中所述,它具有许多级别的html元素,而预期的输出是 Example XML:

<textContent>
    <contentData>
        <p><b><i><u>SubStructureElement_RTE_</u></i></b></p>
    </contentData>
</textContent>
NodeList textContentBodyList=textContent.getElementsByTagName(BODY_NODE);
Element textContentBody = (Element) textContentBodyList.item(0);
NodeList contentDataList = textContentBody.getElementsByTagName(CONTENT_DATA_NODE);
if(contentDataList!=null && contentDataList.getLength()>0) {    
     textContentBody= (Element) contentDataList.item(0);
}

contentDataList = textContentBody.getElementsByTagName(P_NODE);
if(contentDataList!=null && contentDataList.getLength()>0){
    textContentBody= (Element) contentDataList.item(0);
}
eachNewElement.setArtworkContent(textContentBody.getTextContent().trim());
问题:需要按原样获取完整的html。如上所述,我已经试过了

后来我找到了同样的解决方案,答案是这样的

DOMImplementation impl =
    textContentBody.getOwnerDocument().getImplementation();
DOMImplementationLS ls =
    (DOMImplementationLS) impl.getFeature("+LS", "3.0");
LSSerializer serializer = ls.createLSSerializer();
serializer.getDomConfig().setParameter("xml-declaration", false);
String contentData = serializer.writeToString(textContentBody);
公共字符串GetCompleteTeCopyText(NodeList NodeList、StringBuilder completeText)
{
if(nodeList!=null&&nodeList.getLength()>0)
{
for(int i=0;i
谢谢你的发帖 stack overflow中的一些位和片段,我从stack overflow中获得了一些帮助,我按照要求编写了代码,它可以正常工作,

getTextContent()返回每个元素中的内容,不带元素标记

要将XML作为元素写出,可以使用DOM序列化程序:

StringWriter contentDataWriter = new StringWriter();
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
xformer.transform(new DOMSource(textContentBody),
                  new StreamResult(contentDataWriter));
String contentData = contentDataWriter.toString();
或者,您可以使用标识转换:

contentData = contentData.replaceAll("\\s+", " ");
如果要删除额外的空白,如示例中所示,可以执行以下操作:


问题是什么?“问题:在这一行中,我试图提取html内容”这不是问题。您是否尝试使用cloneNode(true)而不是getTextContent()?太好了-那么,什么阻止了您?我需要从XML中提取html内容作为原始文本。然而,textContentBody.getTextContent()将只提供文本内容,而不是整个html数据。这将提供带有Contenda标记的数据,我还想从该标记中提取。例如::
Raghav
,我需要输出为
Raghav
对于我自己提出的问题,我有一个解决方案。
DOMImplementation impl =
    textContentBody.getOwnerDocument().getImplementation();
DOMImplementationLS ls =
    (DOMImplementationLS) impl.getFeature("+LS", "3.0");
LSSerializer serializer = ls.createLSSerializer();
serializer.getDomConfig().setParameter("xml-declaration", false);
String contentData = serializer.writeToString(textContentBody);
StringWriter contentDataWriter = new StringWriter();
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
xformer.transform(new DOMSource(textContentBody),
                  new StreamResult(contentDataWriter));
String contentData = contentDataWriter.toString();
contentData = contentData.replaceAll("\\s+", " ");