我正在尝试使用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!
答案 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');
}