[英]XML document doesn't return value
我有一個用 C# 編寫的 XML 文檔和控制台應用程序,我需要從 XML 讀取一些數據。 為此,我嘗試如下所示,但我沒有得到任何東西,而不是Aram
。
var doc = new XmlDocument();
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("rate", "http://www.w3.org/1999/XSL/Transform");
doc.Load(@"task.xml");
XmlNode root = doc.DocumentElement;
XmlNodeList myNodes = root.SelectNodes("Users/User/Name", nsmgr);
if (myNodes != null)
{
foreach (var item in myNodes)
{
Console.WriteLine(item);
}
}
else
{
Console.WriteLine("Error!");
}
這里也是 XML 文檔。
<Users xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:User>
<xsl:Name>Aram</xsl:Name>
<xsl:Lastname>Vardanyan</xsl:Lastname>
<xsl:Email>aram.vardanyan.y@gmail.com</xsl:Email>
<xsl:Phone>077 195973</xsl:Phone>
</xsl:User>
</Users>
您在代碼中有三個問題:
1 - 您沒有rate
命名空間將其更改為xsl
:
XmlDocument doc = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
2 - SelectNodes
的xsl
前綴User
和Name
:
XmlNode root = doc.DocumentElement;
XmlNodeList myNodes = root.SelectNodes("/Users/xsl:User/xsl:Name", nsmgr);
3 - item
是XmlNode
類型,則Console.WriteLine(item)
不會顯示預期結果,將var
更改為XmlNode
並顯示InnerText
:
foreach (XmlNode item in myNodes)
{
Console.WriteLine(item.InnerText);
}
整個代碼:
XmlDocument doc = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
doc.Load(@"task.xml");
XmlNode root = doc.DocumentElement;
XmlNodeList myNodes = root.SelectNodes("/Users/xsl:User/xsl:Name", nsmgr);
if (myNodes != null)
{
foreach (XmlNode item in myNodes)
{
Console.WriteLine(item.InnerText);
}
}
else
{
Console.WriteLine("Error!");
}
結果
Aram
我希望你覺得這有幫助。
U 也可以 LINQ 到 XML class 以實現相同的功能方式。 查看文檔以更深入地了解用於查詢、修改等的豐富 API。
//load the element users
XElement element = XElement.Load("task.xml");
//Get the namespace with prefix "xsl"
XNamespace @namespace = element.GetNamespaceOfPrefix("xsl");
//Get all childrens of Users element
IEnumerable<XElement> users = element.Elements(XName.Get("User", @namespace.NamespaceName));
foreach (XElement user in users)
{
XElement username = user.Element(XName.Get("Name", @namespace.NamespaceName));
Console.WriteLine(username.Value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.