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文件路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)