How to know if XML element contains an array programmatically in Java?












0















I have an XML response:



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


That may also be with only one child element:



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


Previously the parent had an attribute 'SOAP-ENC:arrayType' to comfortably determine that it contains an array of child elements, but now the response is in previously described format.



Example of how it previously was:



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


Example of previous check:



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
}
}
}
}


I have no control over the response message.



How can I tell for sure that the parent element contains an array of children? To me it seems it's not even possible with this result and information.










share|improve this question

























  • With what language ? With XPath ? How were you checking the attribute before ?

    – Nesku
    Nov 27 '18 at 13:42











  • Java, XPath. Attribute check before: node.getAttribute("SOAP-ENC:arrayType")

    – npc
    Nov 27 '18 at 13:54











  • Can you update your question with your java code ?

    – Nesku
    Nov 27 '18 at 14:03











  • Updated with Java example to show how it was previously done

    – npc
    Nov 27 '18 at 14:29
















0















I have an XML response:



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


That may also be with only one child element:



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


Previously the parent had an attribute 'SOAP-ENC:arrayType' to comfortably determine that it contains an array of child elements, but now the response is in previously described format.



Example of how it previously was:



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


Example of previous check:



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
}
}
}
}


I have no control over the response message.



How can I tell for sure that the parent element contains an array of children? To me it seems it's not even possible with this result and information.










share|improve this question

























  • With what language ? With XPath ? How were you checking the attribute before ?

    – Nesku
    Nov 27 '18 at 13:42











  • Java, XPath. Attribute check before: node.getAttribute("SOAP-ENC:arrayType")

    – npc
    Nov 27 '18 at 13:54











  • Can you update your question with your java code ?

    – Nesku
    Nov 27 '18 at 14:03











  • Updated with Java example to show how it was previously done

    – npc
    Nov 27 '18 at 14:29














0












0








0








I have an XML response:



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


That may also be with only one child element:



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


Previously the parent had an attribute 'SOAP-ENC:arrayType' to comfortably determine that it contains an array of child elements, but now the response is in previously described format.



Example of how it previously was:



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


Example of previous check:



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
}
}
}
}


I have no control over the response message.



How can I tell for sure that the parent element contains an array of children? To me it seems it's not even possible with this result and information.










share|improve this question
















I have an XML response:



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


That may also be with only one child element:



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


Previously the parent had an attribute 'SOAP-ENC:arrayType' to comfortably determine that it contains an array of child elements, but now the response is in previously described format.



Example of how it previously was:



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


Example of previous check:



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
}
}
}
}


I have no control over the response message.



How can I tell for sure that the parent element contains an array of children? To me it seems it's not even possible with this result and information.







xml xpath soap xml-parsing complextype






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 27 '18 at 14:27







npc

















asked Nov 27 '18 at 13:28









npcnpc

126




126













  • With what language ? With XPath ? How were you checking the attribute before ?

    – Nesku
    Nov 27 '18 at 13:42











  • Java, XPath. Attribute check before: node.getAttribute("SOAP-ENC:arrayType")

    – npc
    Nov 27 '18 at 13:54











  • Can you update your question with your java code ?

    – Nesku
    Nov 27 '18 at 14:03











  • Updated with Java example to show how it was previously done

    – npc
    Nov 27 '18 at 14:29



















  • With what language ? With XPath ? How were you checking the attribute before ?

    – Nesku
    Nov 27 '18 at 13:42











  • Java, XPath. Attribute check before: node.getAttribute("SOAP-ENC:arrayType")

    – npc
    Nov 27 '18 at 13:54











  • Can you update your question with your java code ?

    – Nesku
    Nov 27 '18 at 14:03











  • Updated with Java example to show how it was previously done

    – npc
    Nov 27 '18 at 14:29

















With what language ? With XPath ? How were you checking the attribute before ?

– Nesku
Nov 27 '18 at 13:42





With what language ? With XPath ? How were you checking the attribute before ?

– Nesku
Nov 27 '18 at 13:42













Java, XPath. Attribute check before: node.getAttribute("SOAP-ENC:arrayType")

– npc
Nov 27 '18 at 13:54





Java, XPath. Attribute check before: node.getAttribute("SOAP-ENC:arrayType")

– npc
Nov 27 '18 at 13:54













Can you update your question with your java code ?

– Nesku
Nov 27 '18 at 14:03





Can you update your question with your java code ?

– Nesku
Nov 27 '18 at 14:03













Updated with Java example to show how it was previously done

– npc
Nov 27 '18 at 14:29





Updated with Java example to show how it was previously done

– npc
Nov 27 '18 at 14:29












1 Answer
1






active

oldest

votes


















0














You can probably do this by checking the number of item that you have, if it has more than one item you know it's an array :



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





share|improve this answer
























  • This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

    – npc
    Nov 27 '18 at 17:01











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53500822%2fhow-to-know-if-xml-element-contains-an-array-programmatically-in-java%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














You can probably do this by checking the number of item that you have, if it has more than one item you know it's an array :



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





share|improve this answer
























  • This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

    – npc
    Nov 27 '18 at 17:01
















0














You can probably do this by checking the number of item that you have, if it has more than one item you know it's an array :



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





share|improve this answer
























  • This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

    – npc
    Nov 27 '18 at 17:01














0












0








0







You can probably do this by checking the number of item that you have, if it has more than one item you know it's an array :



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





share|improve this answer













You can probably do this by checking the number of item that you have, if it has more than one item you know it's an array :



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






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 27 '18 at 14:51









NeskuNesku

4231311




4231311













  • This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

    – npc
    Nov 27 '18 at 17:01



















  • This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

    – npc
    Nov 27 '18 at 17:01

















This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

– npc
Nov 27 '18 at 17:01





This is what I thought. But I can't know if it's an array if there is parent with only one child element (other than hardcoding that if-this-request-and-this-parent-with-this-child-even-if-only-one-child it's an array). So I changed my other code accordingly. Thanks!

– npc
Nov 27 '18 at 17:01




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53500822%2fhow-to-know-if-xml-element-contains-an-array-programmatically-in-java%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Lallio

Unable to find Lightning Node

Futebolista