【问题标题】:Extract tag values form an XML document C# [duplicate]从 XML 文档 C# 中提取标记值 [重复]
【发布时间】:2017-03-23 05:32:25
【问题描述】:

我有一个 XML 文件,我只需要从中提取标签中的属性值。这种结构中的 XML 外观

<customer> 
    <customerMiddleInitial>W</customerMiddleInitial> 
<name>
      <FirstName>XXXXXXXX</FirstName>
      <LastName> YYYYYYYY</LastName>
</name>
    <customerBirth>1983-01-01</customerBirth> 
    <customerWorkPhone>020 1234567</customerWorkPhone> 
    <customerMobilePhone>0799 1234567</customerMobilePhone> 
    <previousCust>0</previousCust> 
    <timeOnFile>10</timeOnFile> 
    <customerId>CUST123</customerId>
</customer>

所以,我想提取标签之间的所有细节。预期的输出应该是所有客户的详细信息。

如何在 C# 中实现它? 任何帮助将不胜感激。

【问题讨论】:

标签: c# xml xml-parsing


【解决方案1】:
XmlDocument DOC = new XmlDocument();
DOC.Load("LoadYourXMLHere.xml");
XmlNodeList ParentNode = DOC.GetElementsByTagName("customer");
foreach (XmlNode AllNodes in ParentNode)
{
 if (ParentNode == DOC.GetElementsByTagName("customerMiddleInitial"))
{
    customer.Initial = AllNodes["customerMiddleInitial"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("name"))
{
    customer.FirstName= AllNodes["FirstName"].InnerText;
    customer.LastName= AllNodes["LastName"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("customerBirth"))
{
    customer.Birthdate= AllNodes["customerBirth"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("customerWorkPhone"))
{
    customer.WorkPhone= AllNodes["customerWorkPhone"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("customerMobilePhone"))
{
    customer.MobilePhone = AllNodes["customerMobilePhone"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("previousCust"))
{
    customer.PreviousCust= AllNodes["previousCust"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("timeOnFile"))
{
    customer.TimeOnFile= AllNodes["timeOnFile"].InnerText;
}
if (ParentNode == DOC.GetElementsByTagName("customerId"))
{
    customer.ID= AllNodes["customerId"].InnerText;
}
} 

创建一个 Customer 模型并在 C# 中执行上述 xml 解析。

此致,

蒂亚古·拉金德兰

**如果有帮助,请将回复标记为答案,如果没有帮助,请取消标记。

【讨论】:

    【解决方案2】:

    首先你需要看到这个answer

    当您 generated 模型时,只需使用此代码将 xml 反序列化为对象。之后,只需使用模型来处理您的数据。这很容易和简单

        public static T FromXml<T>(String xml)
        {
            T returnedXmlClass = default(T);
    
            try
            {
                using (TextReader reader = new StringReader(xml))
                {
                    try
                    {
                        returnedXmlClass =
                                (T)new XmlSerializer(typeof(T)).Deserialize(reader);
                    }
                    catch (InvalidOperationException)
                    {
                        // String passed is not XML, simply return defaultXmlClass
                    }
                }
            }
            catch (Exception ex)
            {
            }
    
            return returnedXmlClass;
        }
    

    并使用

    var model = FromXml<customer>(yourXmlString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2011-01-18
      • 2015-07-09
      • 2017-10-25
      • 2017-01-28
      相关资源
      最近更新 更多