【问题标题】:Want to fetch xml Values from string parameter想要从字符串参数中获取 xml 值
【发布时间】:2013-01-24 16:48:56
【问题描述】:

我在字符串变量中有以下 xml-

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
  <first-name>RaJeEv(๏๏)</first-name>
  <last-name>Diboliya</last-name>
  <headline>Software Engineer at FASTTRACK INDIA.</headline>
  <site-standard-profile-request>
    <url>http://www.linkedin.com/profile?viewProfile=&amp;url>
  </site-standard-profile-request>
</person>

现在我想从这个字符串中获取名字和姓氏。我该怎么做?

【问题讨论】:

  • 您已经尝试过哪些方法,您考虑过哪些方法?
  • 我什么都没试过,因为我对此一无所知。
  • 您也可以创建一个强类型类并将数据反序列化到其中。
  • @Middas:如何反序列化类?
  • 创建一个与数据匹配的类,然后使用 XmlSerializer 将您的 XML 数据反序列化到该类中。这是一个示例站点:jonasjohn.de/snippets/csharp/xmlserializer-example.htm

标签: c# asp.net xml string


【解决方案1】:

例如

public class Program {
    public static void Main(String[] args) {
        XDocument xdoc = XDocument.Parse(@"<?xml version=""1.0"" encoding=""UTF-8""     standalone=""yes""?>
<person>
  <first-name>RaJeEv(๏๏)</first-name>
  <last-name>Diboliya</last-name>
  <headline>Software Engineer at FASTTRACK INDIA.</headline>
  <site-standard-profile-request>
    <url>http://www.linkedin.com/profile?viewProfile</url>
  </site-standard-profile-request>
</person>");

        XElement xe = xdoc.Elements("person").First();

        Console.WriteLine("{0} {1}", xe.Element("first-name").Value, xe.Element("last-name").Value);
    }         
}

【讨论】:

    【解决方案2】:

    这就是我将如何反序列化 -

    创建一个具体的域类Person

    [Serializable()]
    public class Person
    {
        [System.Xml.Serialization.XmlElementAttribute("first-name")]
        public string FirstName{ get; set; }
    
        [System.Xml.Serialization.XmlElementAttribute("last-name")]
        public string LastName{ get; set; }
    
        [System.Xml.Serialization.XmlElementAttribute("headline")]
        public string Headline{ get; set; }
    
        [System.Xml.Serialization.XmlElementAttribute("site-standard-profile-request")]
        public string ProfileRequest{ get; set; }
    }
    

    使用XmlSerializer将其转换为Person类型

    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    var person = serializer.Deserialize(xml) as Person;
    

    然后可以像这样访问属性

    var firstName = person.FirstName;
    var lastName = person.LastName;
    

    【讨论】:

      【解决方案3】:

      就在 MSDN 上

      Parse XML with XmlReader

      但是,如果您在类强类型中有此结构,您还可以看到有关如何将其转换为 xml 并返回的答案: Send XML String as Response

      【讨论】:

        【解决方案4】:
        var person = XElement.Parse(yourString).Element("person");
        string firstName = person.Element("first-name").Value;
        string lastName = person.Element("last-name").Value;
        

        【讨论】:

        【解决方案5】:

        这就是你要找的..

                XmlDocument xmldoc = new XmlDocument();
                XmlNodeList xmlnode;
                FileStream fs = new FileStream(xmlFilePath, FileMode.Open, FileAccess.Read);
                xmldoc.Load(fs);
        
                xmlnode = xmldoc.GetElementsByTagName("first-name");
                string firstname= string.Empty;
                if(xmlnode!=null)
                    strOption = Regex.Replace(xmlnode[0].InnerText, @"\t|\n|\r| ", "");
        
                xmlnode = xmldoc.GetElementsByTagName("last-name");
                string lastname= string.Empty;
                if(xmlnode!=null)
                    strOption = Regex.Replace(xmlnode[0].InnerText, @"\t|\n|\r| ", "");
        

        希望对你有帮助:)

        【讨论】:

        • 没有冒犯的意思,因为好的,这行得通,但是告诉试图了解如何从 XML 字符串中提取值的人使用正则表达式没有任何附加价值。这是过于复杂的事情。 C# 内置了处理 XPath 和获取 XML 节点的InnerText 的方法。
        • @WimOmbelets :这并不过分复杂,这是必要的,因为如果您的 xml 具有用于查看目的的选项卡/换行符之类的值,那么您将不得不替换每个选项卡、换行符、修剪以获得绝对字符串。 Regexstring.ReplaceTrim 更快。
        • 如果 XML 在其值中包含“表示”字符,您可以追踪是谁做的,然后 [在此处插入非常糟糕的 juju]
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多