DOM4J 选择子节点

Use*_*751 4 java xpath dom4j

我有标签书,然后我读出了 2 个节点

CCUSTBLS_KundennummerBLS

CCOMP_MandantFIBU

之后,我有节点“Lieferadresse”。现在我希望有一个循环遍历节点“Lieferadresse”。我的问题是,我每次都看到所有“Lieferadresse”的孩子,而不仅仅是第一个“Lieferadresse”的孩子。我认为我的 Xpath 是错误的。

<?xml version="1.0" encoding="utf-8"?>
<eDoc>
    <book>
        <CCUSTBLS_KundennummerBLS>1143</CCUSTBLS_KundennummerBLS>
        <CCOMP_MandantFIBU>1</CCOMP_MandantFIBU>
        <Lieferadresse>
            <TSHIPBLS_NrLieferadresse>1</TSHIPBLS_NrLieferadresse> 
            <TCUSTBLS_Kunde>1143</TCUSTBLS_Kunde>

        </Lieferadresse>
        <Lieferadresse>
            <TSHIPBLS_NrLieferadresse>2</TSHIPBLS_NrLieferadresse> 
            <TCUSTBLS_Kunde>1143</TCUSTBLS_Kunde>

        </Lieferadresse>
        <Lieferadresse>
            <TSHIPBLS_NrLieferadresse>3</TSHIPBLS_NrLieferadresse> 
            <TCUSTBLS_Kunde>1143</TCUSTBLS_Kunde>

        </Lieferadresse>
    </book>
</eDoc>
Run Code Online (Sandbox Code Playgroud)

Java类

List<Node> nodes = document.selectNodes("/eDoc/book/child::*");
    List<Node> list = nodes;

    for (Node node : list) {
        String nodeName = node.getName();

        if("Lieferadresse".equals(nodeName)){
            List<Node> nodesDelivery = document.selectNodes("//"+nodeName+"/child::*");
            System.out.println("------------------------------------------------------");
            for(Node nodeDelivery : nodesDelivery){
                System.out.println(nodeDelivery.getName() + " " +nodeDelivery.getText());
            }

        }else{
            System.out.println(nodeName + " " +node.getText());
        }

    }
Run Code Online (Sandbox Code Playgroud)

结果:

    Root element :eDoc
CCUSTBLS_KundennummerBLS 1143
CCOMP_MandantFIBU 1
------------------------------------------------------
TSHIPBLS_NrLieferadresse 1
TCUSTBLS_Kunde 1143
TSHIPBLS_NrLieferadresse 2
TCUSTBLS_Kunde 1143
TSHIPBLS_NrLieferadresse 3
TCUSTBLS_Kunde 1143
------------------------------------------------------
------------------------------------------------------
TSHIPBLS_NrLieferadresse 1
TCUSTBLS_Kunde 1143
TSHIPBLS_NrLieferadresse 2
TCUSTBLS_Kunde 1143
TSHIPBLS_NrLieferadresse 3
TCUSTBLS_Kunde 1143
------------------------------------------------------
------------------------------------------------------
TSHIPBLS_NrLieferadresse 1
TCUSTBLS_Kunde 1143
TSHIPBLS_NrLieferadresse 2
TCUSTBLS_Kunde 1143
TSHIPBLS_NrLieferadresse 3
TCUSTBLS_Kunde 1143
------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 5

使用相对路径*并调用变量selectNodes上的方法node,例如node.selectNodes("*")http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/Node.html#selectNodes(java.lang.String))。如果您知道您对子元素感兴趣,node.elements()如果您转换为节点先..Element