C#操作XML,如何获取指定节点值?

2024-10-30 13:57:55
推荐回答(2个)
回答1:

C#操作XML 有以下几种方式:
1:使用XmlDocument相关类库和方法操作xml
2:使用XDocument相关类库和方法操作xml
3:使用XmlReader和XmlWriter相关类库和方法操作xml
获得指定节点的值也需要 分为属性和元素
1:使用XmlDocument
XmlDocument doc = new XmlDocument();
doc.Load("Customer2.xml");
// XmlNodeList nodeList = doc.GetElementsByTagName("row");
XmlNodeList nodeList = doc.SelectNodes("/Table/row");
//读取属性+元素
foreach (XmlNode item in nodeList)
{
customerInfo.AppId = item.Attributes["AppID"].Value;
customerInfo.CustomerID = item["CustomerID"].InnerText;
}
2:使用XDocument
XDocument xdoc = XDocument.Load("Customer2.xml");
var custs = from customer in xdoc.Descendants("row")
select new
{//读取属性+元素
Version = customer.Attribute("Version").Value,
CustomerID = customer.Element("CustomerID").Value,
};
3:使用XmlReader
XmlReader reader = XmlReader.Create("Customer2.xml", settings);
//读取属性
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name)
{
case "row":
customerInfo = new CustomerInfo();
if (reader.HasAttributes)
{
customerInfo.AppId = reader.GetAttribute("AppID");
customerInfo.Version = reader.GetAttribute("Version");
}
break;
case "CustomerID":
customerInfo.CustomerID = reader.ReadString();
break;
}
}

回答2:

你直接用InnerText是不可能达到你的目的的。 对于内含子节点的节点,不应该直接放置文本内容。如果有需要,你可以增加一个特殊的子节点,比如Content。因为按照你这样的,操作不是很保险。 对于你的这个问题,也不是完全不可以解决,只是不安全。 你可以对你的Test节点枚举其所有的直接子节点,你会发现其中有一个子节点就是这个节点的文本内容的节点,具体这个节点的识别我忘记了(呵呵,好久没这样调试过了),你可以调试跟踪下,然后有了个定性后,再确定方法来处理。