【问题标题】:C# , xml parsing. get data between tagsC#,xml解析。获取标签之间的数据
【发布时间】:2019-07-18 23:03:20
【问题描述】:

我有一个字符串:

responsestring = "<?xml version="1.0" encoding="utf-8"?>
<upload><image><name></name><hash>SOmetext</hash>"

我怎样才能得到之间的值

<hash> and </hash>

?

我的尝试:

responseString.Substring(responseString.LastIndexOf("<hash>") + 6, 8); // this sort of works , but won't work in every situation.

也尝试过使用 xmlreader ,但找不到解决方案。

ty

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    试试

    XDocument doc = XDocument.Parse(str);
    var a = from hash in doc.Descendants("hash")
            select hash.Value;
    

    您将需要 System.Core 和 System.Xml.Linq 程序集引用

    【讨论】:

      【解决方案2】:

      其他人建议使用 LINQ to XML 解决方案,如果可能的话,我也会使用它。

      如果您坚持使用 .NET 2.0,请使用 XmlDocument 甚至 XmlReader。

      但不要尝试使用Substring 和IndexOf 自己操作原始字符串。使用 some 描述的 XML API。否则你会弄错。这是使用正确的工具来完成工作的问题。正确解析 XML 是一项重要的工作 - 已经完成的工作。

      现在,为了得到完整的答案,这里有一个简短但完整的程序,使用您的示例数据:

      using System;
      using System.Xml.Linq;
      
      class Test
      {
          static void Main()
          {
              string response = @"<?xml version='1.0' encoding='utf-8'?>
      <upload><image><name></name><hash>Some text</hash></image></upload>";
      
              XDocument doc = XDocument.Parse(response);
      
              foreach (XElement hashElement in doc.Descendants("hash"))
              {
                  string hashValue = (string) hashElement;
                  Console.WriteLine(hashValue);
              }
          }
      }
      

      显然,这将遍历 所有 hash 元素。如果您只想要一个,您可以根据您的要求使用doc.Descendants("hash").Single() 或doc.Descendants("hash").First()。

      请注意,我在这里使用的转换和Value 属性都将返回元素内所有 文本节点的串联。希望这对您来说没问题 - 或者如果需要,您可以只获得第一个直接子节点的文本节点。

      【讨论】:

        【解决方案3】:

        var val = XElement.Parse();

        val.Descendants(...).Value

        【讨论】:

          【解决方案4】:

          让你的 xml 格式正确并用反斜杠转义双引号。然后应用以下代码

           XDocument resp = XDocument.Parse("<hash>SOmetext</hash>");
          
                 var r= from element in resp.Elements()
                     where element.Name == "hash"
                     select element;
          
          
              foreach (var item in r)
              {
                  Console.WriteLine(item.Value);
              }
          

          【讨论】:

            【解决方案5】:

            您可以使用 xmlreader 和/或 xpath 查询来获取所有需要的数据。

            【讨论】:

            • 请您详细说明一下。我对xml完全不熟悉
            • 请看下面Vinay的回答。
            • @你的胡子很漂亮
            • THNX! @珍妮。问答应该更美!!
            【解决方案6】:

            XmlReader_Object.ReadToFollowing("hash");

            字符串值 = XmlReader_Object.ReadInnerXml();

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-24
              • 2014-11-16
              • 2012-07-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多