Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从XML节点获取HTML内容_Java_Xml - Fatal编程技术网

Java 从XML节点获取HTML内容

Java 从XML节点获取HTML内容,java,xml,Java,Xml,我有一个REST服务返回XML,但是在一些XML内容中,有HTML标记。当我循环遍历XML节点时,似乎只有一个.getTextContent()方法可以剥离内容中的HTML。有没有其他方法可以在不剥离HTML的情况下获取内容 我创建的用于获取XML节点内容和属性的函数 来电者: String firstName = RESTHelper.getXMLProperty(xmlData, "rootNode/person/firstName"); 方法: public static String

我有一个REST服务返回XML,但是在一些XML内容中,有HTML标记。当我循环遍历XML节点时,似乎只有一个.getTextContent()方法可以剥离内容中的HTML。有没有其他方法可以在不剥离HTML的情况下获取内容

我创建的用于获取XML节点内容和属性的函数

来电者:

String firstName = RESTHelper.getXMLProperty(xmlData, "rootNode/person/firstName");
方法:

public static String getXMLProperty(String xml, String searchNodes) {
    String retVal = "";
    String[] nodeSplit = searchNodes.split("/");

    if(xml.trim().length()==0)
        return retVal;

    try 
    {  
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        Document doc;
        NodeList nList;

        DocumentBuilder builder = factory.newDocumentBuilder();
        doc = builder.parse( new InputSource( new StringReader( xml )) );

        nList = doc.getElementsByTagName(nodeSplit[0]);
        retVal = GetXMLNode(nList, searchNodes, 0);
    } catch (Exception e) {  
        e.printStackTrace();  
    } 

    return retVal;
}

private static String GetXMLNode(NodeList nl, String searchNodes, int item)
{
    String retVal = null;
    String findNode = searchNodes.split("/")[item];
    int count = searchNodes.split("/").length;

    item++;

    for(int i=0; i<nl.getLength(); i++) {
        String foundNode = nl.item(i).getNodeName();
        NamedNodeMap nnm = nl.item(i).getAttributes();
        if(nnm!=null && nnm.getLength()>0 && count>item) {
            Node attribute = nnm.getNamedItem(searchNodes.split("/")[item]);
            if(attribute!=null) {
                retVal = attribute.getTextContent();  //returns only text
                break;
            }
        }

        if(foundNode.equals(findNode) && count>item) {
            retVal = GetXMLNode(nl.item(i).getChildNodes(), searchNodes, item);
            break;
        } else if(foundNode.equals(findNode) && count==item) {
            retVal = nl.item(i).getTextContent(); //returns only text
            break;
        }
    }

    return retVal;
}
publicstaticstringgetxmlproperty(stringxml,stringsearchnodes){
字符串retVal=“”;
字符串[]nodeSplit=searchNodes.split(“/”);
if(xml.trim().length()==0)
返回返回;
尝试
{  
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
文件文件;
节点列表;
DocumentBuilder=factory.newDocumentBuilder();
doc=builder.parse(新的InputSource(新的StringReader(xml));
nList=doc.getElementsByTagName(nodeSplit[0]);
retVal=GetXMLNode(nList,searchNodes,0);
}捕获(例外e){
e、 printStackTrace();
} 
返回返回;
}
私有静态字符串GetXMLNode(NodeList nl、字符串searchNodes、int项)
{
字符串retVal=null;
字符串findNode=searchNodes.split(“/”)[item];
int count=searchNodes.split(“/”).length;
项目++;
对于(int i=0;i0&&count>项){
节点属性=nnm.getNamedItem(searchNodes.split(“/”[item]);
if(属性!=null){
retVal=attribute.getTextContent();//只返回文本
打破
}
}
if(foundNode.equals(findNode)&&count>item){
retVal=GetXMLNode(nl.item(i).getChildNodes(),searchNodes,item);
打破
}else if(foundNode.equals(findNode)&&count==item){
retVal=nl.item(i).getTextContent();//只返回文本
打破
}
}
返回返回;
}

最后,我让REST服务为包含HTML的节点返回Base64,然后UI将其转换回来