0

私はこのようなxmlを持っています

<Processed>
    <address>
        <buildingnumber> 29 </buildingnumber>
        <street> South Lasalle Street</street>
        <city>Chicago</city>
        <state>Illinois</state>
        <zip>60603</zip>
    </address>

    <address>
        <buildingnumber> 30 </buildingnumber>
        <street> West Street</street>
        <city>xxx</city>
        <state>yyy</state>
        <zip>12345</zip>
    </address>
</Processed>

値を出力するために、次のコードを使用しています

DocumentBuilder builder = tryDom.getDocumentBuilder();
xmlDocument = tryDom.getXmlDocument(builder, file);

factory = XPathFactory.newInstance();
xPath = factory.newXPath();

String expression8 = "//address/descendant-or-self::*[not(*)]";

try {

    xPathExpression = xPath.compile(expression8);
    Object result = xPathExpression.evaluate(xmlDocument,XPathConstants.NODESET);
    printXpathResult(result);

} catch (XPathExpressionException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

public static void printXpathResult(Object result){

    NodeList nodes = (NodeList) result;

    for (int i = 0; i < nodes.getLength(); i++) {   
        Node node = nodes.item(i);
        String nodeName = node.getNodeName();
        String nodeValue = node.getTextContent();

        System.out.println(nodeName + " = " + nodeValue);
    }
} //end of printXpathResult()

次のような出力が得られます

buildingnumber =  29 
street =  South Lasalle Street
city = Chicago
state = Illinois
zip = 60603
buildingnumber =  30 
street =  West Street
city = xxx
state = yyy
zip = 12345

しかし、問題は、あるアドレスがいつ終了し、他のアドレスが開始するかがわからないことです。私はそれが欲しいzip = 60603。最初のアドレスが終了で、他のアドレスが開始であることはわかっています。レコードを区別するにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

これにより、あなたが知っているzipを持つアドレスノードの位置が得られます(xであるとしましょう)

  count(Processed/address[zip='60603']/preceding-sibling::*)+1

次に使用します

   String expression8 = "//address[x+1]/descendant-or-self::*[not(*)]";

やってみなよ。

于 2013-07-12T10:19:22.023 に答える