如何使用xpath和Java删除简单元素中的整个节点

时间:2019-07-01 07:00:55

标签: java xpath

我有一个像这样的xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User SOURCE_NAME="PublicAssetFeed" xmlns="http://abc.e.wat.com/xml">
<Employee>
<FIELD NAME="Name" TYPE="char">Rahul</FIELD>
<FIELD NAME="Branch" TYPE="char"></FIELD>
<FIELD NAME="Unique ID" TYPE="char">12345</FIELD>
</Employee> `

我要删除整行 NAME =“分支” 。所以我的最终XML应该看起来像

`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User SOURCE_NAME="PublicAssetFeed" xmlns="http://abc.e.wat.com/xml">
<Employee>
<FIELD NAME="Name" TYPE="char">Rahul</FIELD>
<FIELD NAME="Unique ID" TYPE="char">12345</FIELD>
</Employee>
</User>`

我需要使用Java来做到这一点。上面的XML被存储为String。因此,我需要将其转换为XML,删除特定的行,然后再转换回String。我尝试使用XPath,使用下面的Java代码只能找到主节点“ FIELD”。如何删除整行NAME =“ Branch”

package com.javamultiplex;
import java.io.IOException;
import java.io.StringReader;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.xml.sax.InputSource;

public class test {

    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException{    
        String abc="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><User SOURCE_NAME=\"PublicAssetFeed\" xmlns=\"http://abc.e.wat.com/xml\"><Employee><FIELD NAME=\"Name\" TYPE=\"char\">Rahul</FIELD><FIELD NAME=\"Unique ID\" TYPE=\"char\">12345</FIELD><FIELD NAME=\"Branch\" TYPE=\"char\"></FIELD></Employee></User>"
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        XPath xPath = XPathFactory.newInstance().newXPath();
        InputSource sourceMasterTitle = new InputSource(new StringReader(abc.toString()));
        String expression = "//FIELD[@NAME='Branch']";;         
        Node value = (Node) xPath.evaluate(expression, sourceMasterTitle ,XPathConstants.NODE);   
        System.out.println("Main node is "+value.getNodeName());
    }
}

1 个答案:

答案 0 :(得分:0)

XML文件是基于树结构的灵活智能结构。最好将代码设计为遍历节点并删除要删除的代码。

可以更改缩进,可以更改XML文件的结构。如果您采用“删除行”这样的方法,则您的代码可能会过时。

相反,您必须将字符串转换为Document并遍历其节点。

[@elementState]="showlist ? 'show' : 'hide'