Как узнать, содержит ли элемент XML программно массив на Java? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть ответ XML:

<abc:parent>
    <abc:item>
        ...
    </abc:item>
    <abc:item>
        ...
    </abc:item>
</abc:parent>

Это также может быть только с одним дочерним элементом:

<abc:parent>
    <abc:item>
        ...
    </abc:item>
</abc:parent>

Ранее родительский имел атрибут 'SOAP-ENC: arrayType 'для удобного определения того, что он содержит массив дочерних элементов, но теперь ответ имеет ранее описанный формат.

Пример того, как это было раньше:

<abc:parent xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="Struct[1]" SOAP-ENC:offset="[0]">
    <abc:item>
        ...
    </abc:item> 
</abc:parent>

Пример предыдущей проверки:

private void parseNode(DomNode node, String xpath) {
    boolean isLeaf = true;

    for (DomNode childNode : node.getChildren()) {
        if (DomNode.TEXT_NODE != childNode.getNodeType()) {
            isLeaf = false;
        }
    }

    if (!isLeaf) {
        if (node instanceof DomElement) {
            DomElement eNode = (DomElement)node;
            String arrayType = eNode.getAttribute("SOAP-ENC:arrayType");
            if (!PkUtil.isEmpty(arrayType)) {
                // we have a node with an array of children
            }
        }
    }
}

У меня нет контроля над ответным сообщением.

Как я могу точно сказать, что родительский элемент содержит массив дочерних элементов?Мне кажется, что это даже невозможно с этим результатом и информацией.

1 Ответ

0 голосов
/ 27 ноября 2018

Вы, вероятно, можете сделать это, проверив количество item, которое у вас есть, если у него более одного item, вы знаете, что это массив:

DomElement eNode = (DomElement) node;
NodeList childList = eNode.getElementsByTagName("item");
if (childList.getLength() > 1) {
    // we have a node with an array of children
}
...