【问题标题】:Getting the value from specific tag of a XML file in C# [duplicate]从 C# 中的 XML 文件的特定标记中获取值 [重复]
【发布时间】:2015-10-05 04:46:53
【问题描述】:

我开始使用 XML 文件,但我对此知之甚少。

我需要的是从 XML 文件的某个标签中读取值

<Tag>
<Name>PBAS</Name>
<ID>1</ID>
<Description>Array of sequence characters as edited by user</Description>
<Type>char</Type>
<Elements>163</Elements>
<Size>163</Size>
    <Value>TCCGAACAAGCGGCGAGTGCTGGGCGAGTGGCCGCGGGGCTGTGGTCCTGTGCACGGTGATCGCAAGGGCCCCCGGGGCTTGCTGGTCTTCCCTAACGGTTCGTGGAACCCCCGAAGCTGGGGGCTGGCCAGGGGCTTAAGGAACCCTTCCTAAATTAACTAC</Value>
</Tag>

在上面的示例中,我需要获取名为“PBAS”的标签的“值”(字符串 TCCGA...)与“ID 1”之间的字符串。

但我只需要来自名为 PBAS 且带有“ID1”的标签的这个值,因为 XML 文档还有来自其他名称不同的标签的其他“值”。

非常感谢!

【问题讨论】:

  • 你使用什么 C# 代码?
  • 我不知道该怎么做 :( 我正在从 openFileDialog 打开 xml 文件,然后我不知道如何继续...

标签: c# xml


【解决方案1】:
var yourval = XDocument.Load(filename)
                .XPathSelectElement("//Tag[Name='PBAS' and ID='1']")
                .Element("Value")
                .Value;

var yourval = (string)XDocument.Load(filename)
                      .XPathSelectElement("//Tag[Name='PBAS' and ID='1']/Value");

或(仅使用 Linq)

var yourval = XDocument.Load(filename)
              .Descendants("Tag")
              .Where(t => (string)t.Element("Name") == "PBAS")
              .Where(t => (string)t.Element("ID") == "1")
              .First()
              .Element("Value")
              .Value;

PS:必要的命名空间:System.XmlSystem.Xml.XPathSystem.Xml.Linq。另请阅读 Linq2XmlXpath

【讨论】:

  • 效果很好!非常感谢,EZI!
【解决方案2】:

从 XML 中选择节点的技术称为 XPath。基本上,您创建一个由/ 分隔的元素名称路径,例如

/Tag/Value

要指定条件,请将它们放在您要开始条件的位置的方括号中:

/Tag[./Name/text()="PBAS"][./ID/text()="1"]/Value

Above XPath 非常适合演示目的,因为它解释了它的工作原理。在实践中,这将被简化为

/Tag[Name="PBAS"][ID="1"]/Value

代码:

using System.Xml;

var doc = new XmlDocument();
doc.LoadXml(xml);
var nodes = doc.SelectNodes("/Tag[./Name/text()=\"PBAS\"][./ID/text()=\"1\"]/Value");
foreach (XmlElement node in nodes)
{                
    Console.WriteLine(node.InnerText);
}
Console.ReadLine();

【讨论】:

  • 如果您有文件名,请使用doc.Load(filename)
  • 另外一个是提供提示和技巧的唯一答案,而不是完整的硬编码解决方案。 OP 现在可以自己钓了。
【解决方案3】:

您可以使用以下代码:

string xmlFile = File.ReadAllText(@"D:\Work_Time_Calculator\10-07-2013.xml");
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.LoadXml(xmlFile);
                XmlNodeList xnList = xmldoc.SelectNodes("/Tag");
                string Value ="";
foreach (XmlNode xn in xnList)
{
  string ID = xn["ID"].InnerText;
  if(ID =="1")
  {
  value = xn["Value"].InnerText;
  }
}

【讨论】:

  • 假设你把xml文件的内容放到指定路径的文件中:D:\Work_Time_Calculator\10-07-2013.xml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多