asp.net如何获取到xml文件的节点值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net如何获取到xml文件的节点值相关的知识,希望对你有一定的参考价值。

//加载参数Xml
XmlDocument xmlParm = new XmlDocument();
xmlParm.Load(XMLString);
XmlNode xnParams = xmlParm.SelectSingleNode("节点的位置");
string nodeValue = xnParams.Value;
参考技术A XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(XML文件);

Console.WriteLine(xmlDoc["节点"]["节点"].InnerText);
参考技术B linq2xml直接用xpath查找即可 参考技术C 已知有一个XML文件(bookstore.xml)如下:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
</bookstore>
1、往<bookstore>节点中插入一个<book>节点:
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.AppendChild(xesub1);//添加到<book>节点中
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="候捷";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("price");
xesub3.InnerText="58.3";
xe1.AppendChild(xesub3);
root.AppendChild(xe1);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml");

//================
结果为:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</book>
</bookstore>

2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点

XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”

xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”
XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNode xn1 in nls)//遍历

XmlElement xe2=(XmlElement)xn1;//转换类型
if(xe2.Name=="author")//如果找到

xe2.InnerText="亚胜";//则修改
break;//找到退出来就可以了


break;


xmlDoc.Save("bookstore.xml");//保存。

//=================
最后结果为:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="update李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>亚胜</author>
<price>58.3</price>
</book>
</bookstore>

3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
foreach(XmlNode xn in xnl)

XmlElement xe=(XmlElement)xn;

if(xe.GetAttribute("genre")=="fantasy")

xe.RemoveAttribute("genre");//删除genre属性

else if(xe.GetAttribute("genre")=="update李赞红")

xe.RemoveAll();//删除该节点的全部内容


xmlDoc.Save("bookstore.xml");
//====================
最后结果为:

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book>
</book>
</bookstore>

4、显示所有数据。

XmlNode xn=xmlDoc.SelectSingleNode("bookstore");
XmlNodeList xnl=xn.ChildNodes;
foreach(XmlNode xnf in xnl)

XmlElement xe=(XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
Console.WriteLine(xe.GetAttribute("ISBN"));
XmlNodeList xnf1=xe.ChildNodes;
foreach(XmlNode xn2 in xnf1)

Console.WriteLine(xn2.InnerText);//显示子节点点文本

参考资料:http://www.cnblogs.com/yintian2/archive/2007/09/13/891932.html

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?

【中文标题】如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?【英文标题】:How to get list of specific XML elements from XML document using C# ASP.Net? 【发布时间】:2020-07-10 08:32:39 【问题描述】:

我正在尝试从 XML 文档中获取一组特定的元素,以使用 XSLT 文件显示。

我的代码是成功的,但是,我不知道如何根据选择的变化显示特定元素,而不是显示整个 XML 文档。

我的 C# 代码:

string strXSLTFile = Server.MapPath("EmployeeXSLT.xslt");
string strXMLFile = Server.MapPath("Employess.xml");

XmlReader reader = XmlReader.Create(strXMLFile);

XslCompiledTransform objXSLTransform = new XslCompiledTransform();
objXSLTransform.Load(strXSLTFile);

StringBuilder htmlOutput = new StringBuilder();
TextWriter htmlWriter = new StringWriter(htmlOutput);
objXSLTransform.Transform(reader, null, htmlWriter);
ltRss.Text = htmlOutput.ToString();
reader.Close();

我的 XML:

<?xml version="1.0" encoding="utf-8" ?>
<Employees>
  <Employee type="1">
    <ID>100</ID>
    <FirstName>Bala</FirstName>
    <LastName>Murugan</LastName>
    <Dept>Production Support</Dept>
  </Employee>
  <Employee type="2">
    <ID>101</ID>
    <FirstName>Peter</FirstName>
    <LastName>Laurence</LastName>
    <Dept>Development</Dept>
  </Employee>
  <Employee type="3">
    <ID>102</ID>
    <FirstName>Rick</FirstName>
    <LastName>Anderson</LastName>
    <Dept>Sales</Dept>
  </Employee>
  <Employee type="4">
    <ID>103</ID>
    <FirstName>Ramesh</FirstName>
    <LastName>Kumar</LastName>
    <Dept>HR</Dept>
  </Employee>
  <Employee type="5">
    <ID>104</ID>
    <FirstName>Katie</FirstName>
    <LastName>Yu</LastName>
    <Dept>Recruitment</Dept>
  </Employee>
  <Employee type="6">
    <ID>105</ID>
    <FirstName>Suresh</FirstName>
    <LastName>Babu</LastName>
    <Dept>Inventory</Dept>
  </Employee>
</Employees>

我的 XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:for-each select="//Employee">
      <div style="border:1px black solid;width:300px;margin:1px">
        <div>
          <b>Employee ID:</b>
          <xsl:value-of select="ID"/>
        </div>
        <div>
          <b>Name:</b>
          <xsl:value-of select="FirstName"/>
          <xsl:text> </xsl:text>
          <xsl:value-of select="LastName"/>
        </div>
        <div>
          <b>Department:</b>
          <xsl:value-of select="Dept"/>
        </div>
      </div>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

HTML:

<asp:Literal ID="ltRss" runat="server"></asp:Literal>

同样,我需要使用 C# 代码来根据用户选择来选择特定数据。假设特定员工的“type = 3”。

【问题讨论】:

【参考方案1】:

使用字典:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1

    class Program
    
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        
            XmlReader reader = XmlReader.Create(FILENAME);
            XmlSerializer serializer = new XmlSerializer(typeof(Employees));
            Employees employees = (Employees)serializer.Deserialize(reader);

            Dictionary<int, Employee> dict = employees.employees
                .GroupBy(x => x.ID, y => y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

            Employee e100 = dict[100];
        
    
    public class Employees
    
        [XmlElement("Employee")]
        public Employee[] employees  get; set; 
    

    public class Employee
    
        public int ID  get; set;
        public string FirstName  get; set;
        public string LastName  get; set;
        public string Dept  get; set;
    

【讨论】:

以上是关于asp.net如何获取到xml文件的节点值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?

java语句如何获取XML文件的节点值

Asp.Net MVC 无法获取 .html 文件或 .xml 文件 404 错误?

使用 c# asp.net 获取 XML 数据并插入到 sql server

ASP.NET系统中如何实现软件加密、授权

如何在 ASP.NET Core 1.0 中获取 bin 文件夹