【问题标题】:Need help read xml @ js需要帮助阅读xml@js
【发布时间】:2017-10-02 05:53:04
【问题描述】:
<?xml version="1.0" encoding="UTF-8"?>
<vmext:Notification xmlns:vmext="http://www.vmware.com/vcloud/extension/v1.5" eventId="cd35c994-5e3b-4947-a435-bae3c8886af5" type="com/vmware/vcloud/event/vm/create" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/extension/v1.5 http://vcd.hostcenter.dk/api/v1.5/schema/vmwextensions.xsd">
    <vmext:EntityLink rel="entity" id="urn:vcloud:vm:f76c9a4c-b94f-4019-a014-359c8107bc18" name="Windows Server 2016 Datacenter-1" type="vcloud:vm"/>
    <vmext:EntityLink rel="down" id="urn:vcloud:user:3c35fb93-39a2-4fc6-aad7-5d06e138e9e4" name="system" type="vcloud:user"/>
    <vmext:EntityLink rel="up" id="urn:vcloud:org:bb878c05-b433-469f-8d76-5f17b89836de" name="xxxxx.xxx" type="vcloud:org"/>
    <vmext:Timestamp>2017-05-03T17:04:46.311+02:00</vmext:Timestamp>
    <vmext:OperationSuccess>true</vmext:OperationSuccess>
</vmext:Notification>

System.log(myString) <-- the xml data from top
var document = XMLManager.fromString(myString);
var members = document.getElementsByTagName("vmext:EntityLink");
System.log(members.length)

for (i = 0; i < members.length; i++){

System.log(members[i].attributes["ID"].value) 

} 

我想从 vmext:EntityLink 获取所有 id 我只返回 NULL

如果你能帮到我,我会很高兴

【问题讨论】:

  • var 文档 = XMLManager.fromString(myString); var members = document.getElementsByTagName("vmext:EntityLink").getAttribute("id"); System.log(members.length) for (i = 0; i
  • 我每次都得到类似的东西“无法调用 null 的方法“getAttributeNode””

标签: javascript xml-parsing


【解决方案1】:

这是一个小错字。将下面一行中的 ID 替换为 id。

System.log(members[i].attributes["ID"].value) 

而且您不需要在查找标签或元素时包含命名空间。所以删除 vmext: 从下一行。

var members = document.getElementsByTagName("vmext:EntityLink");

这是工作代码,

  <!DOCTYPE html>
        <html>
        <head>
        <style>
        .democlass {
            color: red;
        }
        </style>
        </head>
        <body>

        <h1 class="democlass">Hello World</h1>

        <p>Click the button to display the value of the class attribute of the h1 element.</p>

        <button onclick="myFunction()">Try it</button>

        <p id="demo"></p>

        <script>
        function myFunction() {
            var xml = '<?xml version="1.0" encoding="UTF-8"?>'
        +'<vmext:Notification xmlns:vmext="http://www.vmware.com/vcloud/extension/v1.5" eventId="cd35c994-5e3b-4947-a435-bae3c8886af5" type="com/vmware/vcloud/event/vm/create" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/extension/v1.5 http://vcd.hostcenter.dk/api/v1.5/schema/vmwextensions.xsd">'
            +'<vmext:EntityLink rel="entity" id="urn:vcloud:vm:f76c9a4c-b94f-4019-a014-359c8107bc18" name="Windows Server 2016 Datacenter-1" type="vcloud:vm"/>'
            +'<vmext:EntityLink rel="down" id="urn:vcloud:user:3c35fb93-39a2-4fc6-aad7-5d06e138e9e4" name="system" type="vcloud:user"/>'
            +'<vmext:EntityLink rel="up" id="urn:vcloud:org:bb878c05-b433-469f-8d76-5f17b89836de" name="xxxxx.xxx" type="vcloud:org"/>'
            +'<vmext:Timestamp>2017-05-03T17:04:46.311+02:00</vmext:Timestamp>'
            +'<vmext:OperationSuccess>true</vmext:OperationSuccess>'
        +'</vmext:Notification>'

            var document = parseXML(xml)
            var members = 
                    document.getElementsByTagName("vmext:EntityLink");
            console.log(members.length)

            for (i = 0; i < members.length; i++){

                console.log(members[i].attributes["ID"].value) 

            } 
        }
        function parseXML(val) {
            if (document.implementation && 
     document.implementation.createDocument) {
                xmlDoc = new DOMParser().parseFromString(val, 
  'text/xml');
            }
            else if (window.ActiveXObject) {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.loadXML(val);
            }
            else
            {
                alert("Your browser can't handle this script");
                return null;
            }
            return xmlDoc;
        }
        </script>

        </body>
        </html>

【讨论】:

  • 它在 vmware vrealize orchestrator var document = XMLManager.fromString(myString) 中的 java 脚本; var members = document.getElementsByTagName("vmext:EntityLink"); System.log(members.length) for (i = 0; i
  • 用于查找元素删除命名空间“vmtext:”
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2011-07-13
相关资源
最近更新 更多