如何获取xml文件中某个节点的值

如何获取xml文件中某个节点的值,第1张

1、用 childNodes 属性,按顺序取

实现过程:首先创建一个 xml 对象,然后载入 xml 文件,再根据待取节点父节点在 xml 文件中的序号和本身的序号,确定待取节点的位置,最后返回待取节点的值。

//pId 待取节点父节点序号

//cId 待取节点序号

function getXmlNodeValue(pId, cId) {

var xmlDoc = new ActiveXObject("MicrosoftXMLDOM");

xmlDocasync = false;

xmlDocload("employeeInfoxml");

var nodes = xmlDocdocumentElementchildNodes[pId]childNodes[cId];return nodeschildNodes[0]text;

}

调用方法:alert(getXmlNodeValue(1, 2));

2、用 for 循环来取

实现过程:首先创建一个 ie 支持的 xml 对象,如果发生异常,是创建一个 FireFox 支持的空 xml 对象并返回空;然后载入 xml 文件,如要发生异常也返回空;最后,通过 for 循环遍历查找与传入的节点值相同的节点,找到后返回属于该节点的属性值。

//nodeValue 待取节点的所属节点值

function getXmlNodeValueFor(nodeValue){

var xmlDoc; 

try { 

//创建一个 ie 支持的 XML 文档对象 

xmlDoc = new ActiveXObject("MicrosoftXMLDOM");

}catch(e){

try{

//创建FireFox空的XML文档对象

xmlDoc=documentimplementationcreateDocument("","",null);

}catch(e){

alert(emessage);

return "";

}

}

xmlDocasync = false;

try { 

xmlDocload("employeeInfoxml");

}catch(e){

alert(emessage);

return "";

}

var xd=xmlDocdocumentElementchildNodes;

if(xd==null)

return "";

var tempValue;

for(var i=0;i<xdlength;i++){

if(xd[i]childNodes[0]childNodes[0]nodeValue==nodeValue) tempValue=xd[i]childNodes[2]childNodes[0]nodeValue;

}

return tempValue;

}

首先:xml文件(treexml)内容如下:

<xml version="10" encoding="gb2312">

<treeview>

<tree id="p1">

<text>山东省</text>

<target>_blank</target>

<title>省份</title>

<link></link>

<tree id="p1-1">

<text>威海市</text>

<target>_blank</target>

<title>城市</title>

<link></link>

</tree>

<tree id="p1-2">

<text>烟台市</text>

<target>_blank</target>

<title>城市</title>

<link></link>

<node id="p1-2-1">

<text>长夼村</text>

<target>_blank</target>

<title>乡镇</title>

<link>>

前者:

用在webconfig或者appconfig之类

是系统约定的节点,约定在这个节点下的所有

节点会被systemconfigurationconfigurationmanagerappsetting读到

后者:

完全的自定义接点,appsettings表示什么意思,add表示什么意思将在自己写的xml解析方法里指定和使用

简单来说,config是xml的一个子集

通常的xml都是只定义基本语法,至于节点的层次,节点格式,节点的含义,节点怎么被解析都是你自己定义使得你的xml文件能和你的xml解析方法对应

而webconfig,appconfig这类,是microsoft和软件作者已经定义好了节点意义,你只需要遵守他的格式和规则,就能达到配置作用。

打个可能不太好的比方:

xml文件本身是扑克牌

config是斗地主。

你用config,就不需要自己制定规则,按照它的规则打就行。很方便,但是你不能违反他的规则。

而你自己写xml,还要先制定好规则,规则怎么定都随便你,然后按照这个规则出牌

当然,这些都有一个大前提,都满足xml节点规范,你不能制定扑克牌的规则中放入几个麻将牌

xml文件和txt文件相同,使用普通的文本 *** 作函数即可读取。

1、C语言标准库提供了一系列文件 *** 作函数。文件 *** 作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdioh头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件 *** 作位置的获取与设置。

2、例程:

#include<stdioh>

int a;

char b,c[100];

int main(){

    FILE  fp1 = fopen("inputxml", "r");//打开xml格式输入文件

    FILE  fp2 = fopen("outputtxt", "w");//打开输出文件

    if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出

        puts("不能打开文件!");

        rturn 0;

    }

    fscanf(fp1,"%d",&a);//从输入文件读取一个整数

    b=fgetc(fp1);//从输入文件读取一个字符

    fgets(c,100,fp1);//从输入文件读取一行字符串

    

    printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数

    

    fputs(c,fp2);//向输出文件写入一行字符串

    fputc(b,fp2);//向输出文件写入一个字符

    fprintf(fp2,"%d",a);//向输出文件写入一个整数

    

    fclose(fp1);//关闭输入文件

    fclose(fp2);//关闭输出文件,相当于保存

    return 0;

}

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad("pathxml"));

XmlNode root = xmlDocDocumentElement;

string backupPath = rootAttributes[0]Value;

string targetPath = rootAttributes[1]Value;

不明白的再问哟,请及时采纳,多谢!

using System;

using SystemData;

using SystemConfiguration;

using SystemWeb;

using SystemWebSecurity;

using SystemWebUI;

using SystemWebUIWebControls;

using SystemWebUIWebControlsWebParts;

using SystemWebUIHtmlControls;

using SystemDataSqlClient;

using SystemXml;

using SystemCollections;

using SystemIO;

namespace PartyMis

{

/// <summary>

/// XmlBase 的摘要说明

/// 对XML *** 作的一些小功能

///

/// 2009-12-22 肖松茂制作

/// ,转载请保留

/// 2009-12-26 重大修改

/// 1修改了TableToXml 方法,删除SqlToXml 方法

/// 2增加删除,修改 *** 作。

/// 3添加数据可以只添加一行,不需要整张表--InsertXml方法

/// /// Email: smx1989@gmailcom

/// </summary>

public class XmlBase

{

public XmlBase()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

/// <summary>

/// 把给出的表存放到一个新的xml文件中

/// 如果源文件已经存在,替换;

/// </summary>

/// <param name="dt">给出的数据表,最好设置了TableName</param>

/// <param name="strPath">xml文件存放位置,包括文件名</param>

/// <returns>true|false</returns>

public static bool TableToXml(DataTable dt, string strPath)

{

//string sql = "SELECT id,编码类型,编码名称 FROM T_Code";

try

{

DataSet ds = new DataSet();

//截取传入的 xml 文件路径,获得文件名

string strName = strPathSubstring(strPathLastIndexOf('\\') + 1);

//设置DataSet name 属性

dsDataSetName = strName;

//把表放入DataSet

dsTablesAdd(dt);

//执行写入方法,参数是xml文件路径

if(FileExists(strPath)) FileDelete(strPath);

dsWriteXml(strPath);

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 把指定的xml文件读入到一张表里

/// </summary>

/// <param name="path">xml 文件的路径</param>

/// <returns>生成的表</returns>

public static DataTable XmlToTable(string path)

{

DataSet ds = new DataSet();

//执行DataSet 的方法,读取xml文件里的数据,生成一张表

try

{

dsReadXml(path);

DataTable dt = dsTables[0];

return dt;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return new DataTable();

}

}

/// <summary>

/// 向指定的xml文件增加节点、数据,一次只插入一条--没有节点属性

/// </summary>

/// <param name="path">xml文件路径,包括文件名</param>

/// <param name="rootNode">查找顶级节点的名称</param>

/// <param name="node">设置插入的节点名</param>

/// <param name="nodeName">设置插入的节点的数据名</param>

/// <param name="nodeValue">设置插入的节点的数据值</param>

/// <returns></returns>

public static bool InsertXml(string path, string rootNode, string node, string[] nodeName, ArrayList nodeValue)

{

try

{

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(path);

XmlNode root = xmlDocSelectSingleNode(rootNode);//查找rootNode 根节点

XmlElement xe = xmlDocCreateElement(node);//创建一个 node 节点

for (int j = 0; j < nodeNameLength; j++)

{

XmlElement xeChild = xmlDocCreateElement(nodeName[j]);//新建 node 节点的子节点

xeChildInnerText = nodeValue[j]ToString();//设置文本节点

xeAppendChild(xeChild);//添加到 node 节点中

}

rootAppendChild(xe);//添加到 rootNode 节点中

xmlDocSave(path);

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 向指定的xml文件增加节点、数据,一次只插入一条--有节点属性

/// </summary>

/// <param name="path">xml文件路径,包括文件名</param>

/// <param name="rootNode">查找顶级节点的名称</param>

/// <param name="node">设置插入的节点名</param>

/// <param name="attriName">设置插入的节点的属性名</param>

/// <param name="attriValue">设置插入的节点的属性值</param>

/// <param name="nodeName">设置插入的节点的数据名--被当做子节点</param>

/// <param name="nodeValue">设置插入的节点的数据值--被当做子节点</param>

/// <returns>true|false</returns>

public static bool InsertXml(string path, string rootNode, string node, string[] attriName,ArrayList attriValue,string[] nodeName,ArrayList nodeValue)

{

try

{

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(path);

XmlNode root = xmlDocSelectSingleNode(rootNode);//查找rootNode 根节点

XmlElement xe = xmlDocCreateElement(node);//创建一个 node 节点

for (int i = 0; i < attriNameLength; i++)

{

xeSetAttribute(attriName[i], attriValue[i]ToString());//设置该节点属性

}

for (int j = 0; j < nodeNameLength; j++)

{

XmlElement xeChild = xmlDocCreateElement(nodeName[j]);//新建 node 节点的子节点

xeChildInnerText = nodeValue[j]ToString();//设置文本节点

xeAppendChild(xeChild);//添加到 node 节点中

}

rootAppendChild(xe);//添加到 rootNode 节点中

xmlDocSave(path);

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 修改指定xml文件的指定节点--有节点属性

/// 注意!第一个节点属性用来查找节点!例如:

/// 修改《book id="001"》 的节点:attriName[0]=id attriValue[0]=001;--用来找到这个节点

/// attriName[1]=id attriValue[1]=002 --用来修改数据,第1个以后的都是用来修改数据的

/// </summary>

/// <param name="path">xml文件的路径</param>

/// <param name="rootNode">顶级节点名</param>

/// <param name="node">要修改的节点名</param>

/// <param name="attriName">要修改的节点的属性名</param>

/// <param name="attriValue">要修改的节点的属性值</param>

/// <param name="nodeName">要修改的数据节点名</param>

/// <param name="nodeValue">要修改的数据节点值</param>

/// <returns></returns>

public static bool UpdateXml(string path, string rootNode, string node, string[] attriName, ArrayList attriValue, string[] nodeName, ArrayList nodeValue)

{

try

{

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(path);

XmlNodeList nodeList = xmlDocSelectSingleNode(rootNode)ChildNodes;//获取rootNode节点的所有子节点

foreach (XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

if (xeGetAttribute(attriName[0]) == attriValue[0]ToString())//根据 节点的 属性 查找节点

{

for (int i = 0; i < attriNameLength; i++)

{

xeSetAttribute(attriName[i], attriValue[i]ToString());//修改该节点的相应属性值

}

for (int j = 0; j < nodeNameLength; j++)

{

XmlNode xn1 = xeSelectSingleNode(nodeName[j]);

xn1InnerText = nodeValue[j]ToString();//修改该节点下的对应内容

}

break;

}

}

xmlDocSave(path);//保存。

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 修改指定xml文件的指定节点--没有节点属性

/// 注意!第一个数据节点用来查找节点!例如:

/// 修改 id=01 的数据节点 修改成 id=02, nodeName[0]=id nodeValue[0]=01;nodename[1]=id,nodeValue[1]=02

/// </summary>

/// <param name="path">xml文件的路径</param>

/// <param name="rootNode">顶级节点名</param>

/// <param name="node">要修改的节点名</param>

/// <param name="nodeName">要修改的数据节点名</param>

/// <param name="nodeValue">要修改的数据节点值</param>

/// <returns></returns>

public static bool UpdateXml(string path, string rootNode, string node, string[] nodeName, ArrayList nodeValue)

{

try

{

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(path);

XmlNodeList nodeList = xmlDocSelectSingleNode(rootNode)ChildNodes;//获取rootNode节点的所有子节点 table1

foreach (XmlNode xn in nodeList)//遍历所有子节点

{

bool blnFind = false;

XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

XmlNodeList nodeList1 = xeChildNodes;//获取 xe 节点的所有子节点 id,编码,类型

foreach (XmlNode xn1 in nodeList1)//遍历所有子节点

{

XmlElement xe1 = (XmlElement)xn1;//将子节点类型转换为XmlElement类型

if (xe1Name == nodeName[0] && xe1InnerText == nodeValue[0]ToString())//根据 节点的 名字 查找节点 "id" && "2"

{

blnFind = true;

break;

}

}

if (blnFind)

{

for (int i = 1; i < nodeNameLength; i++)

{

XmlNode xn2 = xeSelectSingleNode(nodeName[i]);

xn2InnerText = nodeValue[i]ToString();

}

}

}

xmlDocSave(path);//保存。

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 删除指定节点--有属性

/// </summary>

/// <param name="path">xml文件的路径</param>

/// <param name="rootNode">顶级节点名</param>

/// <param name="node">要删除的节点名</param>

/// <param name="attriName">要删除的节点的属性名</param>

/// <param name="attriValue">要删除的节点的属性值</param>

/// <returns>true | false</returns>

public static bool DeleteXml(string path, string rootNode, string node, string attriName, string attriValue)

{

try

{

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(path);

XmlNode rootnode = xmlDocSelectSingleNode(rootNode);

XmlNodeList nodeList = rootnodeChildNodes;//获取rootNode节点的所有子节点

foreach (XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

if (xeGetAttribute(attriName) == attriValue)//根据 节点的 属性 查找节点

{

rootnodeRemoveChild(xe);

break;

}

}

xmlDocSave(path);//保存。

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 删除指定节点或数据,--没有属性

/// </summary>

/// <param name="path">xml文件的路径</param>

/// <param name="rootNode">顶级节点名</param>

/// <param name="node">要删除的节点名</param>

/// <param name="nodeName">要删除的节点的数据节点名</param>

/// <param name="nodeValue">要删除的节点的数据节点值</param>

/// <param name="all">是否把整个节点删除,否,只删除节点中上面的数据</param>

/// <returns>true | false</returns>

public static bool DeleteXml(string path, string rootNode, string node, string nodeName, string nodeValue,bool all)

{

try

{

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(path);

XmlNode rootnode = xmlDocSelectSingleNode(rootNode);

XmlNodeList nodeList = rootnodeChildNodes;//获取rootNode节点的所有子节点

foreach (XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

XmlNodeList nodeList1 = xeChildNodes;//获取 xe 节点的所有子节点 id,编码,类型

foreach (XmlNode xn1 in nodeList1)//遍历所有子节点

{

XmlElement xe1 = (XmlElement)xn1;//将子节点类型转换为XmlElement类型

if (xe1Name == nodeName && xe1InnerText == nodeValue)//根据 节点的 名字 查找节点 "id" && "2"

{

if (all) rootnodeRemoveChild(xe);

else xeRemoveChild(xe1);

break;

}

}

}

xmlDocSave(path);//保存。

return true;

}

catch (Exception e1)

{

ResportWriteToLog(e1);

return false;

}

}

/// <summary>

/// 导出成为Excel

/// </summary>

/// <param name="exportTargetGridView">目标GridView</param>

//public static void ExportExcel(GridView exportTargetGridView)

//{

// >

XmlDocument先把xml load进来。。

//取所有root节点子节点

XmlNodeList nodeList = docSelectNodes("/root");

for each(XmlNode node in nodeList) //遍历每一个子节点

{

//分别读取子节点的需要节点值,自己存吧,反正这么取的

string elementValue=nodeSelectSingleNode("//elementValue")InnerTextToString();

string elementScore=nodeSelectSingleNode("//elementScore")InnerTextToString();

}

以上就是关于如何获取xml文件中某个节点的值全部的内容,包括:如何获取xml文件中某个节点的值、xmlhttp如何读取这些XML节点、java中如何获取WebContent下config文件下的xx.xml文件路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9585972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存