C# 解析XML文件,使用XmlNode["..."]的方式能访问到此节点下的多个同名节点吗

C# 解析XML文件,使用XmlNode["..."]的方式能访问到此节点下的多个同名节点吗,第1张

能,

C# *** 作XML时,要引入命名空间using SystemXml

获取根节点的方法:

1、知道根节点名称:

XmlNode root = xmlDocSelectSingleNode("根节点名称");

2、不知道根节点名称:

XmlElement root = xmlDocDocumentElement;

xml中node(节点)和element(元素)的区别(还是不太明白)

1、element是一个小范围的定义,必须含有完整信息的结点才能叫做元素。例如:<div>内容</div>,一个元素一定是一个节点,一个节点不一定是一个元素。

2、node是基本对象,attribute,element,text等都是node的子对象。

创建节点

1、CreateElement() 方法

有一个参数,两个参数,三个参数三种重载,参数类型均为string。

一个参数:CreateElement("元素名称")

两个参数:CreateElement("元素名称","元素的命名空间")

三个参数:CreateElement("元素的前缀","元素的名称","元素的命名空间")

2、CreateNode() 方法

三个参数 都为string类型

CreateNode("节点类型","节点名称","节点命名空间")

四个参数 都为string类型

CreateNode("节点类型","节点的前缀","节点名称","节点命名空间")

问题:节点前缀有什么作用?结点命名空间有什么作用?

增加节点:

1、AppendChild() 方法

2、InsertAfter(要插入的节点,参考节点) 方法

3、InsertBefore(要插入的节点,参考节点) 方法

增加节点属性

SetAttribute("属性名","属性值")方法

删除节点属性:

RemoveAttribute("属性名称")

给节点添加数据:

1、给节点的innerText赋值

例子:XmlElement eName = docCreateElement("name");

eNameInnerText = aaaaa;

2、添加XmlText节点,为其添加值

添加节点元素

将XmlText以子节点的方式添加给节点元素

例子: XmlElement eName = xmlDocCreateElement("name");

XmlText tName = xmlDocCreateTextNode(aaaaa);

eNameAppendChild(tName);

寻找某个节点(寻找name节点):

先找到根节点,找出根节点下的节点列表(XmlNodeList),遍历每个节点。

再找每个节点下的节点列表,进行遍历,指导找到所需要的节点。

<msg>

<name></name>

<content></content>

</msg>

方法:

XmlNode root = xmlDocSelectSingleNode("msg");

XmlNodeList nodeList = rootChildNodes;

foreach (XmlNode node in nodeList)

{

if(nodeName=="name")

{

找到name节点,进行 *** 作

}

}

删除节点

RemoveAll(无参数)

RemoveChild(要移除的节点)

更新节点

1、ReplaceChild(新节点,老节点)

建立一个新节点,替换老节点

2、找到要更新的节点,重新设置其属性和数据

用GridView显示xml文件中的数据

view plaincopy to clipboardprint

DataSet ds = new DataSet();

dsReadXml(ServerMapPath("BooksInfoxml"));

GridView1DataSource = dsTables[0];

GridView1DataBind();

DataSet ds = new DataSet();

dsReadXml(ServerMapPath("BooksInfoxml"));

GridView1DataSource = dsTables[0];

GridView1DataBind();

xml文件

view plaincopy to clipboardprint

<xml version="10" encoding="utf-8">

<bookstore>

<book genre="ee" ISBN="2-3631-4">

<title>三国演义</title>

<author>lfdfd</author>

<price>5595</price>

</book>

<book ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>涨红</author>

<price>583</price>

</book>

<book genre="计算机" ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>盖茨</author>

<price>583</price>

</book>

<book genre="计算机" ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>盖茨</author>

<price>583</price>

</book>

</bookstore>

<xml version="10" encoding="utf-8">

<bookstore>

<book genre="ee" ISBN="2-3631-4">

<title>三国演义</title>

<author>lfdfd</author>

<price>5595</price>

</book>

<book ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>涨红</author>

<price>583</price>

</book>

<book genre="计算机" ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>盖茨</author>

<price>583</price>

</book>

<book genre="计算机" ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>盖茨</author>

<price>583</price>

</book>

</bookstore>

显示效果:

删除属性为计算机的节点

view plaincopy to clipboardprint

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(ServerMapPath("xml/BooksInfoxml"));

XmlNodeList xnl = xmlDocSelectSingleNode("bookstore")ChildNodes;

foreach (XmlNode xn in xnl)

{

XmlElement xe = (XmlElement)xn;

if (xeGetAttribute("genre") == "计算机")

{

xeRemoveAll();//删除属性=计算机的该节点的全部内容

//xeParentNodeRemoveChild(xe);

}

}

xmlDocSave(ServerMapPath("xml/BooksInfoxml"));

XmlDocument xmlDoc = new XmlDocument();

xmlDocLoad(ServerMapPath("xml/BooksInfoxml"));

XmlNodeList xnl = xmlDocSelectSingleNode("bookstore")ChildNodes;

foreach (XmlNode xn in xnl)

{

XmlElement xe = (XmlElement)xn;

if (xeGetAttribute("genre") == "计算机")

{

xeRemoveAll();//删除属性=计算机的该节点的全部内容

//xeParentNodeRemoveChild(xe);

}

}

xmlDocSave(ServerMapPath("xml/BooksInfoxml"));

xeParentNodeRemoveChild(xe)

寻找到xe节点的父节点,再删除他的子节点。那么此节点(包括节点标记)将不存在。显示中将没有空行

xeRemoveAll()

移除节点内容,但是节点标签还在。显示中有空行

你说的是获取指定id下面的节点的属性值吧!

程序如下,其中equal(“”)双引号中的值为节点的属性值

属性值获取如下:

package saxbuilderibmxmlproperty;

import javaioFile;

import javaioIOException;

import javautilIterator;

import orgdom4jAttribute;

import orgdom4jDocument;

import orgdom4jDocumentException;

import orgdom4jElement;

import orgdom4jioSAXReader;

import orgjdomJDOMException;

import orgjdominputSAXBuilder;

public class XmlProperty {

public Element element;

String path = "D:\\xml\\axml";

public void getElementProperty() {

File file = new File(path);

try {

SAXReader reader = new SAXReader();

Document dc = readerread(file);

Element e = dcgetRootElement();

// 节点值

Element child = (Element) egetQName("COMMAND");

Systemoutprintln(childtoString());

// 一级节点

for (Iterator iterator = eelementIterator(); iteratorhasNext();) {

Element el = (Element) iteratornext();

// 一级节点的属性信息

for (Iterator iterator2 = elattributeIterator(); iterator2

hasNext();) {

Attribute attribute = (Attribute) iterator2next();

if(attributegetName()equals("bodyCategory")){

Systemoutprintln("attributegetName()一级节点的属性信息+"+attributegetName()+attributegetValue());

}else{

Systemoutprintln("attributegetName()一级节点的属性信息+"+attributegetName()+attributegetValue());

}

// 二级节点

for (Iterator iterator3 = elelementIterator(); iterator3

hasNext();) {

Element ele = (Element) iterator3next();

// 二级节点的属性信息

for (Iterator iterator4 = eleattributeIterator(); iterator4

hasNext();) {

Attribute attribute1 = (Attribute) iterator4next();

if(attribute1getName()equals("cmdType")){

Systemoutprintln("attribute1getName()二级节点的属性信息+"+attribute1getName()+"+"+attribute1getValue());

}else{

Systemoutprintln("attribute1getName()二级节点的属性信息+"+attribute1getName()+"+"+attribute1getValue());

}

}

}

}

} catch (DocumentException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

以上就是关于C# 解析XML文件,使用XmlNode["..."]的方式能访问到此节点下的多个同名节点吗全部的内容,包括:C# 解析XML文件,使用XmlNode["..."]的方式能访问到此节点下的多个同名节点吗、java语句如何获取XML文件的节点值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存