1

xml ファイルの解析とそこからのデータの取得に問題があります。以下は、xml とコード スニペットです。---XML (test.xml)-----

<?xml version="1.0" encoding="utf-8"?>
<root>
<Server>
<IPAddress>xxx.xxx.xxx.xxx</IPAddress>
<UserName>admin</UserName>
<Password>admin</Password>
</Server>

- - -コードスニペット: - - -

public static String getInput(String element)
{
    String value = "";
    try {

        File inputFile = new File("test.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbFactory.newDocumentBuilder();
        Document inputData = builder.parse(inputFile);
        inputData.getDocumentElement().normalize();
        String[] elementArray = element.split("/");

        XPath xPath =  XPathFactory.newInstance().newXPath();
        String xpathExpression = element;

        System.out.println("Xpath Expression:" + xpathExpression);
                NodeList node = (NodeList) xPath.compile(xpathExpression).evaluate(inputData, XPathConstants.NODESET);
        System.out.println(node.getLength());

        if (null != node){
                System.out.println(node.getLength());
                for (int i=0; i<node.getLength(); i++){
                    System.out.println(i);
                    System.out.println("Node count =" + node.getLength() + ";" + 
                        "Node Name =" + node.item(i).getNodeName()); 

                if (node.item(i).getNodeName() == elementArray[1]){
                    System.out.println(node.item(i).getNodeName()+ "=" + node.item(i).getNodeValue());
                    value = node.item(i).getNodeValue();
                }

            }   
        }           

    }   catch (Exception e) {
        e.printStackTrace();
    }

    return value;
}

コードは正常にコンパイルされます。実行中、ノード「サーバー」とその子「IPAddress」が見つからないようです。上記の getInput() の呼び出しは、次の形式で main から取得されます。

getInput("Server/IPAddress");

どこが間違っているのかわからず、私はXpathに本当に慣れていません。誰かが助けてくれるかどうか疑問に思っていました。

ありがとう!

4

1 に答える 1

2

最も外側の要素は<root/>であり、 ではありません<server/>。あなたのクエリは

getInput("root/Server/IPAddress")

フルパスを使用したい場合、または

getInput("/root/Server/IPAddress")

ルート要素から開始していることを示します。または、XPath を使用してドキュメント全体のすべてのサーバー要素を検索することもできます。

getInput("//Server/IPAddress")

それらはすべて出力されます

Xpath Expression:root/Server/IPAddress
1
1
0
Node count =1;Node Name =IPAddress

それ以外の

Xpath Expression:Server/IPAddress
0
0

getInput()もちろん、関数内で選択したプレフィックスの 1 つをどうにかして先頭に追加することもできます。

于 2013-10-15T15:37:13.033 に答える