Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DOMParser(javascript)未标识文本节点_Javascript_Xml_Dom - Fatal编程技术网

DOMParser(javascript)未标识文本节点

DOMParser(javascript)未标识文本节点,javascript,xml,dom,Javascript,Xml,Dom,我遇到了一个相当不寻常的问题。如果有必要,为了更好地理解全局,请参阅我的上一篇文章 好的,现在可以了,但是当我尝试使用基本相同的方法解析不同的XML字符串时,得到的NodeList将不包含任何文本节点。我将把试图解析的字符串的一部分发布到节点列表中,而不是格式化的XML: <clients><client><code>1111</code><crm>2222</crm><company><name>F

我遇到了一个相当不寻常的问题。如果有必要,为了更好地理解全局,请参阅我的上一篇文章

好的,现在可以了,但是当我尝试使用基本相同的方法解析不同的XML字符串时,得到的NodeList将不包含任何文本节点。我将把试图解析的字符串的一部分发布到节点列表中,而不是格式化的XML:

<clients><client><code>1111</code><crm>2222</crm><company><name>FOO</name><enterprise>BAR</enterprise><cnpj>XXX</cnpj></company></client></clients>
请注意,这些并不是节点的实际值,但是父节点客户端遵循这个scructure(虽然是经过简化的)

因此,出于测试目的,我最终求助于以下代码,以查看列表是否正确创建:

function parseClientsXML(xmlString, filter){
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xmlString, "text/xml");
    var clients = xmlDoc.getElementsByTagName(filter);

    for(var i = 0; i < clients.length; i++){
        var client = clients[i].childNodes;
        for (var j = 0; j < client.length; j++){
            var node = client[j];
            $('#div_clients').append("Node index: " + i + " - Type: " + node.nodeType + " - Name: " + node.nodeName + "<br>");
        }
    }
我预期的结果是:

Node index: 0 - Type: 1 - Name: client
Node index: 1 - Type: 1 - Name: code
Node index: 2 - Type: 3 - Name: #text
Node index: 3 - Type: 1 - Name: crm
Node index: 4 - Type: 3 - Name: #text
等等。使用从我另一篇文章的XML中解析出来的字符串作为“theString”,它工作得很好。但本文中字符串的输出如下所示:

Node index: 0 - Type: 1 - Name: client
Node index: 1 - Type: 1 - Name: code
Node index: 2 - Type: 1 - Name: crm
Node index: 3 - Type: 1 - Name: company
Node index: 4 - Type: 1 - Name: name
...

我整天都在研究这个问题,但找不出解决办法。输入字符串与我上面发布的一模一样(不完全一样,但很接近)。有什么想法吗?

按照承诺解决您的问题

function parseClientsXML(xmlString, filter) {
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xmlString, "text/xml");

    (function output(node, filter) {
        var child;
        var children = node.childNodes.length;

        if (filter === "") {
            $('#div_clients').append(node.nodeType + " : " + node.nodeName + "<br>");
        } else {
            filter = node.nodeName === filter ? "" : filter;
        }

        for (child = 0; child < children; child += 1) {
            output(node.childNodes[child], filter);
        }
    }(xmlDoc, filter));
}
函数parseClientsXML(xmlString,过滤器){
var parser=新的DOMParser();
var xmlDoc=parser.parseFromString(xmlString,“text/xml”);
(功能输出(节点、过滤器){
var-child;
var childrends=node.childNodes.length;
如果(过滤器==“”){
$(“#div_clients”).append(node.nodeType+”:“+node.nodeName+”
”; }否则{ 过滤器=节点。节点名称===过滤器?“:过滤器; } 对于(child=0;child
如果没有其他人,我明天会尝试解决这个问题,对不起。谢谢,我稍后会尝试,并尽快给你一些反馈!=)很好,瑞安,谢谢你。顺便说一句,你的代码很容易理解,但是你知道为什么我的代码不起作用吗?很高兴我能帮上忙。因此getElementsByTagName将遍历树,查找标记名为“client”的任何节点并返回它们。然后,代码将返回节点的子节点。客户机的子节点具有标记名:“code”、“crm”和“company”(这就是为什么只输出这些标记名的原因)。您的代码不会深入到树中。我的解决方案将继续在树中搜索更多的子节点(子节点的子节点-如果有意义的话)。这篇关于W3C的教程可能会帮助您更好地理解哦,我明白了,前面的XML是有效的,因为nodetree没有“子节点的子节点”(如果有意义的话=p)。非常感谢你,Ryan,我已经编写了你的代码,现在我几乎可以完成我从一开始就计划好的所有事情。
function parseClientsXML(xmlString, filter) {
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xmlString, "text/xml");

    (function output(node, filter) {
        var child;
        var children = node.childNodes.length;

        if (filter === "") {
            $('#div_clients').append(node.nodeType + " : " + node.nodeName + "<br>");
        } else {
            filter = node.nodeName === filter ? "" : filter;
        }

        for (child = 0; child < children; child += 1) {
            output(node.childNodes[child], filter);
        }
    }(xmlDoc, filter));
}