在Javascript中解析文档中的XML字符串片段

时间:2009-11-22 04:45:53

标签: javascript xml

我正在尝试使用DOMParser或XPath从文档中获取XML片段。具有DOMParser或document.evaluate的元素返回一个具有null nodeValue的元素,如何将xml片段作为字符串返回?以下是我无法在WebKit中工作的示例。

XML:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="contact">
    <attribute name="address1_stateorprovince" />
    <attribute name="new_source" />
    <attribute name="ownerid" />
    <attribute name="new_organization" />
    <attribute name="new_lastcontacted" />
    <attribute name="emailaddress1" />
    <attribute name="address1_city" />
    <attribute name="telephone1" />
    <order attribute="fullname" descending="false" />
    <filter type="and">
      <condition attribute="new_conflicting" operator="eq" value="1" />
    </filter>
    <attribute name="fullname" />
    <attribute name="new_csuid" />
    <attribute name="new_contacttype" />
    <attribute name="contactid" />
  </entity>
</fetch>

来源:

var parser = new DOMParser();
var filterXmlDoc = parser.parseFromString(xml, "text/xml");
var test = filterXmlDoc.getElementsByTagName("filter")[0];
test.nodeValue; // null!

2 个答案:

答案 0 :(得分:4)

nodeValue是节点的“值”,对于Element类型没有意义(正确null)。它不是节点的xml字符串表示。

对于WebKit,您可以使用XMLSerializer来取回字符串表示:

var xml = new XMLSerializer().serializeToString(test);
xml; // <filter type="and"><condition attribute="new_conflicting" operator="eq" value="1"/></filter>

更新重新评论“是否只有一种简单的方法来获取内部xml?”:

您可以从节点构造DocumentFragment,并仅序列化片段:

var frag = filterXmlDoc.createDocumentFragment();
while(test.firstChild) {
  frag.appendChild(test.firstChild);
}
var xml = new XMLSerializer().serializeToString(frag);
xml; // <condition attribute="new_conflicting" operator="eq" value="1"/>

请注意,这会在运行后清空test节点。

答案 1 :(得分:0)

尝试:

test.items(0).nodeValue;

getElementsByTagName()返回一个NodeList,因此您必须使用该对象的items()方法。

虽然理想情况下你会这样做:

if (test.length)
{
    console.log(test.items(0).nodeValue);
}
else
{
    console.log('Nothing Found');
}