【问题标题】:find value by tag name in xml在 xml 中按标签名称查找值
【发布时间】:2011-02-27 07:12:28
【问题描述】:

如何在 xml 文件中按标签名称查找值?使用 C#.net 2.0

我的 xmldocument 中只有 10 个不同的节点。

我不想写 xpath。我认为有一个自动查找属性。

【问题讨论】:

    标签: .net xml c#-2.0


    【解决方案1】:

    我已经用这个 scneirao 解决了我的问题:

    XmlNodeList nl = xdoc.GetElementsByTagName("CustomerID"); sb.Append(nl[0].InnerXml);

    【讨论】:

      【解决方案2】:

      简单示例:

      XmlDocument xmlDoc = new XmlDocument();
      xmlDoc.LoadXml(someRawData);
      XmlNodeList yourNodes = xmlDoc.GetElementsByTagName("YourTagName");
      

      然后您可以遍历 yourNodes 并获取值。

      【讨论】:

        【解决方案3】:

        不记得确切的语法,但写一个 Xpath 查询,然后使用XPathNavigator.Select 找到它。

        编辑:请记住,我认为它类似于//@tagname,所以如果你这样做XPathNavigator.Select("//@tagname"),我认为它会起作用。假设标签是指一个属性,如果你正在寻找元素,它应该只是//tagname

        【讨论】:

          【解决方案4】:

          查看这个完整的函数,从 xml 文件中获取节点值以及属性值...

          public string GetXmlNodeValue(string xmlfilePath, string TagName, string Attribute)
          {
              XmlDocument objXML = new XmlDocument();
              bool IsNodeValuefound = false;
              string Value = string.Empty;
              try
              {
                  if (File.Exists(xmlfilePath))
                  {
                      objXML.Load(xmlfilePath);
          
                      XmlNode xNode = objXML.DocumentElement.FirstChild;
                      while (xNode != null)
                      {
                          if (string.Compare(xNode.Name, TagName, true) == 0)
                          {
                              if (!string.IsNullOrEmpty(Attribute))
                              {
                                  if (xNode.Attributes.GetNamedItem(Attribute) != null)
                                  {
                                      IsNodeValuefound = true;
                                      Value = xNode.Attributes.GetNamedItem(Attribute).Value;
                                  }
                              }
                              else
                              {
                                  IsNodeValuefound = true;
                                  Value = xNode.InnerText.Trim();
                              }
                          }
                          xNode = xNode.NextSibling;
                      }
                  }
                  if (IsNodeValuefound)
                      return Value;
                  else
                      return string.Empty;
              }
              catch (XmlException xmlEx)
              {
                  throw xmlEx;
              }
              catch (Exception ex)
              {
                  throw ex;
              }
              finally
              {
                  objXML = null;
              }
          }     
          

          【讨论】:

          • 谢谢,但我不想使用很多代码行。就像 GetElementByID 并达到它的价值
          【解决方案5】:

          首先,通过这段代码获取XmlDocument:

          XmlDocument infodoc = new XmlDocument();
          infodoc.LoadXml(xmlString);
          

          如果你的标签看起来像:

          <directory value="D:/BACKUPS"></directory>
          

          通过以下方式获取“目录”标签的值:

          var directory = infodoc.GetElementsByTagName("directory")[0].Attributes["value"].Value;
          

          如果你的标签看起来像:

          <directory>D:/BACKUPS</directory>
          

          通过以下方式获取“目录”标签的值:

          var directory = infodoc.GetElementsByTagName("directory")[0].InnerXml;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-30
            • 1970-01-01
            • 2016-12-28
            • 1970-01-01
            • 2018-07-01
            • 1970-01-01
            • 2020-06-05
            • 1970-01-01
            相关资源
            最近更新 更多