【问题标题】:Get value of xml node in c#在c#中获取xml节点的值
【发布时间】:2017-08-05 00:36:25
【问题描述】:

XML

 <table>
<row>
    <field name="ID">22490</field>
    <field name="post_date">2014-03-24 09:55:50</field>
    <field name="post_title">Joe Bloggs</field>
    <field name="post_status">Live</field>
    <field name="post_modified">2017-07-31 15:33:46</field>
</row>
<row>
    <field name="ID">29078</field>
    <field name="post_date">2017-08-01 08:19:57</field>
    <field name="post_title">Mary Poppins</field>
    <field name="post_status">auto-draft</field>
    <field name="post_modified">2017-08-01 08:19:57</field>
</row><table>

我正在尝试遍历上面的 xml,如何从上面的 post_title 字段中获取值“Joe Bloggs”?

这是我目前所拥有的:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:\\myxmlfile.xml");

XmlNodeList nodeList = xmlDoc.GetElementsByTagName("row");

foreach (XmlNode node in nodeList)
{
    string post_title = /// how can i get this
    string post_status = /// how can i get this
}

我可以遍历节点列表,但是我无法获取每个字段中的值。

【问题讨论】:

  • “只是不能将值分配给变量” - 你是什么意思?你能发一个minimal reproducible example吗? (这显然不是完整的 XML 文档,否则它将有两个根元素。)我也强烈建议使用 LINQ to XML,但那是另一回事。

标签: c# xml


【解决方案1】:

这就是我解决问题的方法:

XmlNodeList orgFields = xmlDoc.SelectNodes("//row");



        foreach (XmlNode org in orgFields)
        {
            post_title = org.ChildNodes[2].InnerText;
            post_status = org.ChildNodes[3].InnerText;

        }

【讨论】:

    【解决方案2】:

    您可以检查属性名称是否符合您的预期

    foreach (XmlNode node in nodeList)
    {
        string temp = XmlNode.SelectSingleNode("field[@name='post_title']").InnerText;
    }
    

    这肯定会奏效。

    【讨论】:

    • .InnerText 返回一个字符串,因此可以显式声明 temp。这样更易读。
    • 在我的示例中,node.attributes 集合为空,值在子节点中
    • Edit 似乎从字符串评估中的循环中删除了当前元素,现在它不起作用
    • @PranavSingh 老一个。我不知道为什么我编辑了这个--------> foreach (XmlNode node in nodeList) { string post_title = node.Attributes["Name"].Value; if(post_title == "post_title") { var temp = node.InnerText; // 这将有你的价值。将其存储在您想要存储的任何位置} }
    【解决方案3】:

    您也可以使用 xPath。

            XmlNodeList postTitleFields = xmlDoc.SelectNodes("//field[@name='post_title']");
            foreach (XmlNode postTitleField in postTitleFields)
            {
                string post_title = postTitleField.InnerText;
            }
    

    【讨论】:

    • 如何使用它来获取节点内的多个值?
    • @Dez79 但这正好回答了你的问题。如果您正在寻找其他东西,请更新问题以反映这一点。 postTitleFields 是一个集合,因此它确实包含 post_title 的多个值。
    猜你喜欢
    • 2013-08-12
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2017-05-29
    • 2019-12-03
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多