簡體   English   中英

從xml獲取具有特定屬性值java的所有節點

[英]get all node from xml having specific attriute value java

<main-project name="" version="1.0.2">
<data name="data">
<tag>
<link-to  object="processor"/>
</tag>
</data>
<output name="output">
<tag>
<link-to  object="processor"/>
</tag>
</output>
<processor name ="processor">
<tag>
<link-to  object="data"/>
</tag>
</processor>
</main-project>

我想讓所有具有屬性對象=處理器的節點,我嘗試使用

 XPath xPath =  XPathFactory.newInstance().newXPath();
NodeList linkageNodesEpf = (NodeList) xPath.compile("//link-to[@object = 'processor']").evaluate(Doc, XPathConstants.NODESET);

該查詢給出了一個空列表,但是當我替換上面的查詢的link-to link可以正常工作並給出正確的結果時,所以我認為可能是dash(-)造成了問題。

請幫我解決這個問題

好吧,該代碼:

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
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 java.io.ByteArrayInputStream;
import java.io.IOException;

public class SimpleClass2 {

    public static void main(String[] args) throws InterruptedException, XPathExpressionException, ParserConfigurationException, IOException, SAXException {
        String str = "<main-project name=\"\" version=\"1.0.2\">\n" +
                "<data name=\"data\">\n" +
                "<tag>\n" +
                "<link-to  object=\"processor\"/>\n" +
                "</tag>\n" +
                "</data>\n" +
                "<output name=\"output\">\n" +
                "<tag>\n" +
                "<link-to  object=\"processor\"/>\n" +
                "</tag>\n" +
                "</output>\n" +
                "<processor name =\"processor\">\n" +
                "<tag>\n" +
                "<link-to  object=\"data\"/>\n" +
                "</tag>\n" +
                "</processor>\n" +
                "</main-project>";
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document xmlDoc = builder.parse(new ByteArrayInputStream(str.getBytes()));
        XPath xPath =  XPathFactory.newInstance().newXPath();

        NodeList linkageNodesEpf = (NodeList) xPath.compile("//link-to[@object = 'processor']").evaluate(xmlDoc, XPathConstants.NODESET);
        for (int i = 0; i < linkageNodesEpf.getLength(); i++) {
            System.out.println(linkageNodesEpf.item(i));
        }
    }

}

在我的機器上產生sush結果(oracle jdk8_45):

[link-to: null]
[link-to: null]

您可以嘗試復制它嗎,它會產生什么結果?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM