簡體   English   中英

XML 文檔不返回值

[英]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 - SelectNodesxsl前綴UserName

XmlNode root = doc.DocumentElement;
XmlNodeList myNodes = root.SelectNodes("/Users/xsl:User/xsl:Name", nsmgr);

3 - itemXmlNode類型,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM