Check if parsed xml element contains a specified child element * @param {array} parent - represents xml element to check for child element * @param {(string|string[])} requiredElem - name of child element(s) * @param {object} [options] - specify additional options * @param {boolean} [isList] - indic
(parent, requiredElem, options)
| 56 | * @return {boolean} true / false - if parsed xml element contains child |
| 57 | */ |
| 58 | function xmlContainsElem(parent, requiredElem, options) { |
| 59 | // Non-top level xml is parsed into object in the following manner. |
| 60 | |
| 61 | // Example: <Parent><requiredElem>value</requiredElem> |
| 62 | // <anotherElem>value2</anotherElem></Parent> |
| 63 | // Result: { Parent: [{ requiredElem: ["value"], |
| 64 | // anotherElem: ["value2"] }] } |
| 65 | |
| 66 | // Example for xml list: |
| 67 | // <ParentList> |
| 68 | // <requiredElem>value</requiredElem> |
| 69 | // <requiredElem>value</requiredElem> |
| 70 | // <requiredElem>value</requiredElem> |
| 71 | // </ParentList> |
| 72 | // Result: { ParentList: [{ requiredElem: ['value', 'value', 'value'] }] } |
| 73 | |
| 74 | const isList = options ? options.isList : false; |
| 75 | const checkForAll = options ? options.checkForAll : false; |
| 76 | // true by default, validateParent only designated as false when |
| 77 | // parent was validated in previous check |
| 78 | const validateParent = (options && options.validateParent !== undefined) ? |
| 79 | options.validateParent : true; |
| 80 | |
| 81 | if (validateParent && !_isValidElem(parent)) { |
| 82 | return false; |
| 83 | } |
| 84 | if (Array.isArray(requiredElem)) { |
| 85 | if (checkForAll) { |
| 86 | return requiredElem.every(elem => _isValidElem(parent[0][elem])); |
| 87 | } |
| 88 | return requiredElem.some(elem => _isValidElem(parent[0][elem])); |
| 89 | } |
| 90 | if (isList) { |
| 91 | if (!Array.isArray(parent[0][requiredElem]) || |
| 92 | parent[0][requiredElem].length === 0) { |
| 93 | return false; |
| 94 | } |
| 95 | } else { |
| 96 | return _isValidElem(parent[0][requiredElem]); |
| 97 | } |
| 98 | |
| 99 | return true; |
| 100 | } |
| 101 | |
| 102 | |
| 103 | /** Validate XML, returning an error if any part is not valid |
no test coverage detected