对于想了解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数据)
- Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件
- Java XML使用方法-使用xpath在XML文件中的节点列表中查找和添加/替换更多子节点
- JavaScript JavaScript与XML——“XML DOM”的注意要点
- javascript – jQuery不会使用名为option的节点解析xml
javascript – 使用xml2js解析xml的节点(js解析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的解析。3.0版本位于external/tinyxml2
下。2.x版本位于cocos2dx/support/tinyxml2
下
生成xml文档
-
引入头文件
#include "tinyxml2/tinyxml2.h" using namespace tinyxml2;
-
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}
-
打印结果
<?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文档
- ;
-
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 }
在节点解析过程中,注意对获取到的节点进行判空处理。
-
解析结果打印
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文件中的节点列表中查找和添加/替换更多子节点
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”的注意要点
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
我正在使用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的相关信息,可以在本站进行搜索。
本文标签: