1

次の XML があります。

     <ConfigGroup Name="Replication">
        <ValueInteger Name="ResponseTimeout">10</ValueInteger>
        <ValueInteger Name="PingTimeout">2</ValueInteger>
        <ValueInteger Name="ConnectionTimeout">10</ValueInteger>
        <ConfigGroup Name="Pool">
            <ConfigGroup Name="1">
                <ValueString Encrypted="false" Name="Host">10.20.30.40</ValueString>
                <ValueInteger Name="CacheReplicationPort">8899</ValueInteger>
                <ValueInteger Name="RadiusPort">12050</ValueInteger>
                <ValueInteger Name="OtherPort">4868</ValueInteger>
            </ConfigGroup>
            <ConfigGroup Name="2">
                <ValueString Encrypted="false" Name="Host">10.20.30.50</ValueString>
                <ValueInteger Name="CacheReplicationPort">8899</ValueInteger>
                <ValueInteger Name="RadiusPort">12050</ValueInteger>
                <ValueInteger Name="OtherPort">4868</ValueInteger>
            </ConfigGroup>
        </ConfigGroup>
     </ConfigGroup>

この XML を Java で解析する最も簡単な方法は何だろうと思っています。2 つのホスト要素 (10.20.30.40 と 10.20.30.50 など) から値が必要です。3 つ以上のプール エントリがある (またはまったくない) 場合があることに注意してください。

Java でさまざまな XML パーサーを使用する方法の簡単な例を見つけるのに苦労しています。

どんな助けでも大歓迎です。

ありがとう!

4

4 に答える 4

3

Java XPath API を使用すると、簡単に実行できます。次の xpath 式

//ValueString[@Name='Host']

あなたが望むものと一致する必要があります。API で使用する方法は次のとおりです。

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(yourXml.getBytes());
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodeList = (NodeList) xpath.compile("//ValueString[@Name='Host']").evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
  String ip = ((Element) nodeList.item(i)).getTextContent();
  // do something with your ip
}
于 2012-07-30T12:19:27.623 に答える
0

SAXONを使用できます

String vs_source = "Z:/Code_JavaDOCX/1.xml";
Processor proc = new Processor(false);
net.sf.saxon.s9api.DocumentBuilder builder = proc.newDocumentBuilder();
XPathCompiler xpc = proc.newXPathCompiler();
try{
            XPathSelector selector = xpc.compile("//output").load();
            selector.setContextItem(builder.build(new File(vs_source)));
            for (XdmItem item: selector) 
                {
                    System.out.println(item.getStringValue());
                }
        }   
catch(Exception e)
        {
            e.printStackTrace();
        }
于 2015-06-27T07:25:14.837 に答える
0
File file = new File("some/path");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
NodeList list = document.getElementsByTagName("name/of /your/ element");
// its return NodeList of all descendant Elements with a given tag name, in document order.  
for (int i = 0; i < list .getLength(); i++) {
     System.out.println(list.item(i).getNodeName()+" = "+list.item(i).getNodeValue());
 }
于 2012-07-30T11:58:26.877 に答える