How to know if XML element contains an array programmatically in Java?
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
add a comment |
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
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
add a comment |
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
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
xml xpath soap xml-parsing complextype
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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
}
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
}
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
add a comment |
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
}
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
add a comment |
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
}
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
}
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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