GVKun编程网logo

javascript – 使用xml2js解析xml的节点(js解析xml数据)

17

对于想了解javascript–使用xml2js解析xml的节点的读者,本文将提供新的信息,我们将详细介绍js解析xml数据,并且为您提供关于Cocos2d-xtinyxml2用于xml的解析,自动生

对于想了解javascript – 使用xml2js解析xml的节点的读者,本文将提供新的信息,我们将详细介绍js解析xml数据,并且为您提供关于Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件、Java XML使用方法-使用xpath在XML文件中的节点列表中查找和添加/替换更多子节点、JavaScript JavaScript与XML——“XML DOM”的注意要点、javascript – jQuery不会使用名为option的节点解析xml的有价值信息。

本文目录一览:

javascript – 使用xml2js解析xml的节点(js解析xml数据)

javascript – 使用xml2js解析xml的节点(js解析xml数据)

我试图使用xml2js解析和查询xml中的元素.我的xml字符串如下:
var xml = "<config><test>Hello</test><data>SomeData</data></config>";

我想要的是提取值并将其分配给var extractedData

这是我到目前为止所拥有的:

var parser = new xml2js.Parser();
parser.parseString(xml,function(err,result){
  //Extract the value from the data element
  extractedData = result['data'];
}

这不起作用.有人可以指出我是如何从我的xml中获取值的吗?

谢谢

这似乎不起作用.有人能告诉我这里可能存在什么问题吗?

解决方法

这个对我有用
var xml2js = require('xml2js');
var xml = "<config><test>Hello</test><data>SomeData</data></config>";

var extractedData = "";
var parser = new xml2js.Parser();
parser.parseString(xml,result){
  //Extract the value from the data element
  extractedData = result['config']['data'];
  console.log(extractedData);
});
console.log("Note that you can't use value here if parseString is async; extractedData=",extractedData);

结果:

SomeData
Note that you can't use value here if parseString is async; extractedData= SomeData

Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件

Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件

Cocos2d-x 已经加入了tinyxml2用于xml的解析。3.0版本位于external/tinyxml2下。2.x版本位于cocos2dx/support/tinyxml2

生成xml文档

  1. 引入头文件

    #include "tinyxml2/tinyxml2.h"
    using namespace tinyxml2;
  2. xml文档生成

    void  HelloWorld::makeXML(constchar *fileName)
    {
    std::string filePath = FileUtilsgetInstance()->getWritablePath()+ fileName;
    XMLDocumentpDoc newXMLDocument();
    //xml 声明(参数可选)XMLDeclarationpDel  pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");
    pDocLinkEndChild(pDel//添加plist节点XMLElementplistElement NewElement"plist"
    plistElementSetAttribute"version","1.0"plistElementXMLCommentcommentElement NewComment"this is xml comment"commentElement//添加dic节点dicElement "dic"dicElement//添加key节点keyElement "key"
    keyElementpDocNewText"Text"));
    dicElementkeyElementarrayElement "array"arrayElementforint i  0 i<3++)
        elm "name"
        elm"Cocos2d-x"
        arrayElementelm}SaveFilefilePath.c_str());Printdelete}
  3. 打印结果

    <?xml version="1.0" encoding"UTF-8"?>
    <plist version="1.0"><!--this is xml comment--><dic>
        <key>Text</key><array>
            <name>Cocos2d-x</name></array></dic></plist>

上面代码使用tinyxml简单生成了一个xml文档。

解析xml

下面我们就来解析上面创建的xml文档

    ;
  1. xml解析

    parseXMLXMLError errorId LoadFileiferrorId !=
        //xml格式错误
        returnrootEle RootElement//获取第一个节点属性XMLAttributeattribute  rootEleFirstAttribute//打印节点属性名和值
    log"attribute<em>name = %s,attribute</em>value = %s" attributeName(),102)">Value());</p>dicEle FirstChildElementkeyEle  dicElekeyEle
        log"keyEle Text= %s" keyEleGetTextarrayEle NextSiblingElementchildEle  arrayElewhile childEle "childEle Text= %s" childEle
        childEle }

    在节点解析过程中,注意对获取到的节点进行判空处理。

  2. 解析结果打印

    cocos2d: attribute_name  versionattribute_value 1.0
    cocos2d keyEle TextText childEle Cocos2d-x
    cocos2dx

小结

上面的简单示例,演示了如何使用tinyxml进行xml文档生成和解析。更多详细的帮助请参考 tinyxml帮助文档http://grinninglizard.com/tinyxml2docs/index.html


源地址:http://www.tairan.com/archives/7340

Java XML使用方法-使用xpath在XML文件中的节点列表中查找和添加/替换更多子节点

Java XML使用方法-使用xpath在XML文件中的节点列表中查找和添加/替换更多子节点

Xpath专门用于跟踪/读取xml,但不能用于修改xml。

因此,我将代码从使用XPath更改为使用DOM Parser。

try
            {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.newDocument();
        // Map root element
        Element rootElement = doc.createElement("map");
        doc.appendChild(rootElement);
        //ROOT map
        
        //1. ankomstDato
        Element ankomstDato = doc.createElement("string");
        Attr attrType_ankomstDato = doc.createAttribute("key");
        attrType_ankomstDato.setValue("ankomstDato");
        ankomstDato.setAttributeNode(attrType_ankomstDato);
        ankomstDato.appendChild(doc.createTextNode(ankomstDato_value));
        rootElement.appendChild(ankomstDato);

        //. planlagtAntallPerUndergruppe
        // planlagtAntallPerUndergruppe element
        

        if (planlagtAntallPerUndergruppe_Count !=0){
            Element planlagtAntallPerUndergruppe = doc.createElement("array");
            rootElement.appendChild(planlagtAntallPerUndergruppe);

            Attr attr = doc.createAttribute("key");
            attr.setValue("planlagtAntallPerUndergruppe");
            planlagtAntallPerUndergruppe.setAttributeNode(attr);

            for (int i = 0; i < planlagtAntallPerUndergruppe_Count; i ++){
                //to add "map" element
                Element map1 = doc.createElement("map");
                planlagtAntallPerUndergruppe.appendChild(map1);


                    // antall element
                    Element antall = doc.createElement("number");
                    Attr attrType = doc.createAttribute("key");
                    attrType.setValue("antall");
                    antall.setAttributeNode(attrType);
                    antall.appendChild(doc.createTextNode(planlagtAntallPerUndergruppe_antall_value[i]));
                    map1.appendChild(antall);
                    
                    //kode element
                    Element kode = doc.createElement("string");
                    Attr attrType1 = doc.createAttribute("key");
                    attrType1.setValue("kode");
                    kode.setAttributeNode(attrType1);
                    kode.appendChild(doc.createTextNode(planlagtAntallPerUndergruppe_kode_value[i]));
                    map1.appendChild(kode);
            }
        }
        //end planlagtAntallPerUndergruppe

        
        // Write the content into XML file
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("E:/utils/students-new.xml"));
        
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        // Beautify the format of the resulted XML
        transformer.setOutputProperty(OutputKeys.INDENT,"yes");
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");
        transformer.transform(source,result);
         }
        catch(Exception ex)
          {
            ex.printStackTrace();
        }
    
      }
,

将收集的数组作为参数传递到Write2XMLfile方法中

public void Write2XMLfile(String[] planlagtAntallPerUndergruppe_antall_value,String[] planlagtAntallPerUndergruppe_kode_value) {
   
   try {
       
         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
         Document doc = dBuilder.newDocument();
         
         Element rootElement = doc.createElement("map");
         doc.appendChild(rootElement);

         Element mainString = doc.createElement("string");
         mainString.setAttribute("key","ankomstDato");
         rootElement.appendChild(mainString).setTextContent("2020-08-20");
         
         
         Element array = doc.createElement("array");
         array.setAttribute("key","planlagtAntallPerUndergruppe");
         rootElement.appendChild(array);
         

         if(planlagtAntallPerUndergruppe_antall_value.length>0){
             for (int i = 0; i < planlagtAntallPerUndergruppe_antall_value.length; i++) {
                Element map = doc.createElement("map");
                array.appendChild(map);
                
                Element number =  doc.createElement("number");
                number.setAttribute("key","antall");
                map.appendChild(number).setTextContent(planlagtAntallPerUndergruppe_antall_value[i]);
                
                Element string =  doc.createElement("string");
                string.setAttribute("key","kode");
                map.appendChild(string).setTextContent(planlagtAntallPerUndergruppe_kode_value[i]);
            }
         }

         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         transformer.setOutputProperty(OutputKeys.INDENT,"yes");
         transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","2");
         DOMSource source = new DOMSource(doc);
         StreamResult output = new StreamResult(new File("output.xml"));
         transformer.transform(source,output);
         
      } catch (Exception e) {
         e.printStackTrace();
      }
}

output.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<map>
  <string key="ankomstDato">2020-08-20</string>
  <array key="planlagtAntallPerUndergruppe">
    <map>
      <number key="antall">67</number>
      <string key="kode">SLAKTEGRIS</string>
    </map>
    <map>
      <number key="antall">4</number>
      <string key="kode">UNGSAU</string>
    </map>
  </array>
</map>

JavaScript JavaScript与XML——“XML DOM”的注意要点

JavaScript JavaScript与XML——“XML DOM”的注意要点

DOM2级核心

docuent.implementation中引入了createDocument()方法,IE9支持该方法,如:

var xmldom = document.implementation.createDocument(namespaceUri, root, doctype);

一般来说只用传第二个参数即可:

var xmldom = document.implementation.createDocument("", "root", null);

创建一个新的、文档元素为root的XML文档,可以使用下面代码:

var xmldom = document.implementation.createDocument("", "root", null); 命名空间URI为空字符表示未指定命名空间,给文档类型传入null即不指定文档类型。
console.log(xmldom.documentElement.tagName); //"root"

var child = xmldom.createElement("child");
xmldom.documentElement.appendChild(child);

DOMParser类型

Firefox、Opera、Chrome、Safari支持(IE8不支持),

  • DOMParse类型可将XML解析为DOM文档。

创建一个DOMParse实例,再调用

  • parseFromString()方法。这个方法接受两个参数:要解析的XML字符串和内容类型(内容类型始终为"text/xml")。返回值是一个Document实例。

如:

var parser = new DOMParse();
var xmldom = parser.parseFromString("<root><child/></root>", "text/xml");

alert(xmldom.documentElement.tagName); //"root"
alert(xmldom.documentElement.firstChild.tagName); //"child"
var anotherChild = xmldom.createElement("child");
xmldom.documentElement.appendChild(anthorChild);
var children = xmldom.getElementsByTagName("child");
alert(children.length); //2

发生解析错误时,仍然会从parseFromString()中返回一个Document对象。但这个对象的文档元素是

  • <parsererror>(Firefox、Opera);对象根元素第一个子元素为<parsererro>(Safari、Chrome)。

parseerror元素的内容是对解析错误地描述。通过getElementsByTagName()查找parsererror确定是否有解析错误。

var parser = new DOMParser(),
    xmldom,
    errors;
try {
    xmldom = parser.parseFromString("<root>", "text/xml"); //这里少了一个闭标签</root>
    errors = xmldom.getElementsByTagName("parsererror");
    if (errors.length > 0) {
        throw new Error("Parsing error!");
    }
} catch (ex) {
    console.log(ex.message); //Parsing error!
}

XMLSerializer类型

此类可将DOM文档序列化为XML字符串。(IE6~8不支持)。

要序列化DOM文档,首相必须创建XMLSerializer实例,然后将文档传入其serializerToString()方法:

var xmldom = document.implementation.createDocument("", "root", null);
xmldom.documentElement.appendChild(xmldom.createElement("child"));

var serializer = new XMLSerializer();
var xml = serializer.serializeToString(xmldom);

console.log(xml); //<root><child/></root>

IE8之前版本中的XML

(略)

虽然可以通过XML DOM文档对象加载XML文件,但公认的还是使用XMLHttpRequest对象比较好。

跨浏览器处理XML

解析XML

function parseXml(xml) {
    var xmldom = null;
    if (typeof DOMParser != "undefined") {
        xmldom = (new DOMParser()).parseFromString(xml, "text/xml");
        var errors = xmldom.getElementsByTagName("parsererror");
        if (errors.length > 0) {
            throw new Error("XML parsing error: " + errors[0].textContent);
        }
    } else if (typeof ActiveXObjext != "undefined") {
        xmldom = createDocument();
        xmldom.loadXML(xml);
        if (xmldom.parseError != 0) {
            throw new Error("XML parsing error: " + xmldom.parseError.reason);
        }
    } else {
        throw new Error("No XML parser available.");
    }
    return xmldom;
}

序列化XML

function serializeXml(xmldom) {
    if (typeof XMLSerializer != "undefined") {
        return (new XMLSerializer()).serializeToString(xmldom);
    } else if (typeof xmldom.xml != "undefined") {
        return xmldom.xml;
    } else {
        throw new Error("Could not serialize XML DOM.");
    }
}

javascript – jQuery不会使用名为option的节点解析xml

javascript – jQuery不会使用名为option的节点解析xml

我正在使用jQuery来解析一些XML,如下所示:

function enumOptions(xml) {
   $(xml).find("animal").each(function(){  
       alert($(this).text());
   });
}

enumOptions("

这非常有效.但是,如果我尝试寻找称为“选项”的节点,那么它不起作用:

function enumOptions(xml) {
   $(xml).find("option").each(function(){  
      alert($(this).text());
   });
}

enumOptions("

没有任何错误,只是没有得到任何警报,好像找不到任何东西.它只适用于名为选项的节点,其他一切我测试的工作正常!

我正在使用当前版本的jQuery – 1.4.2.

有人有什么想法?

TIA.

BG

最佳答案
更新

jQuery现在内置了这种方法.您可以使用

$.parseXML("..")

从字符串构造XML DOM.

jQuery依赖于使用innerHTML的HTML DOM来解析文档,当标记名称与HTML中的标记名称冲突时,该文档可能具有不可靠的结果.

相反,您可以使用正确的XML解析器来首先解析文档,然后使用jQuery进行查询.下面的方法将以跨浏览器的方式解析有效的XML文档:

// http://www.w3schools.com/dom/dom_parser.asp
function parseXML(text) {
    var doc;

    if(window.DOMParser) {
        var parser = new DOMParser();
        doc = parser.parseFromString(text,"text/xml");
    }
    else if(window.ActiveXObject) {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(text);
    }
    else {
        throw new Error("Cannot parse XML");
    }

    return doc;
}

构建XML DOM后,jQuery可以正常使用 – http://jsfiddle.net/Rz7Uv/

var text = "

我们今天的关于javascript – 使用xml2js解析xml的节点js解析xml数据的分享就到这里,谢谢您的阅读,如果想了解更多关于Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件、Java XML使用方法-使用xpath在XML文件中的节点列表中查找和添加/替换更多子节点、JavaScript JavaScript与XML——“XML DOM”的注意要点、javascript – jQuery不会使用名为option的节点解析xml的相关信息,可以在本站进行搜索。

本文标签: