我想使用xml文件,如下所示
<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page name="Default.aspx">
<method name="Login_click">
<message code="0" description="this is a test description">
<client code="0000000000" description="this is a description for clent 0000000000" />
</message>
</method>
</page>
</pages>
现在我想创建一个如下所示的函数
public static string GetAppMessage(string pageName, string methodName, string clientCode, string code)
{
var xmlFile = HttpContext.Current.Server.MapPath("~/App_Data/Theme.xml");
var doc = new XmlDocument();
doc.Load(xmlFile);
if (string.IsNullOrEmpty(clientCode))
{
//go to node who page name to pageName
//and read the vlue
}
else
{
//read for a particular client code
}
}
我该怎么办呢。
我是否需要循环遍历每个节点,或者我是否可以直接访问特定节点并找到死亡节点。
如下所示
foreach (XmlNode chldNode in doc.ChildNodes)
{
....
答案 0 :(得分:0)
您可以使用XDocument和LINQ to xml:
代替XmlDocumentvar xmlFile = HttpContext.Current.Server.MapPath("~/App_Data/Theme.xml");
XDocument xmlDoc = XDocument.Load(xmlFile);
var xmlPage = (from page in xmlDoc.Descendants()
where page.Name.LocalName == "page"
&& page.Attribute("name").Value == pageName
select page).FirstOrDefault();
if (xmlPage != null)
{
//do what you need
}
答案 1 :(得分:0)
当您使用XmlDocument并且您知道XML文件的外观(我的意思是您知道信息所在的节点的名称)时,您可以执行以下操作:
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlElement root = doc["NameOfRootNode"];
if (root != null)
{
//For nodes you just need to bypass to get to another subnode:
XmlNode node = root.SelectSingleNode("nameOfAnotherNode");
//For nodes you actually want to do something with, like read text, attribute etc.
if (node != null && node.SelectSingleNode("nameOfOneMoreNode") != null)
{
var xmlElement = node["nameOfOneMoreNode"];
if (xmlElement != null)
{
//Read from the xmlElement you selected and do something with it...
}
}
//...
}
使用SelectSingleNode或SelectNodes,您可以操纵特定的已知节点,并可以读取InnerText或属性。
答案 2 :(得分:0)
您可以使用XPath通过<page>
属性获取name
元素,例如:
string xpath = "//page[@name='{0}']";
XmlNode page = doc.SelectSingleNode(string.Format(xpath, pageName));
//and read the vlue
基本上,在XPath之上查找具有<page>
属性等于name
参数的pageName
元素。