从C#中获取XML文件的特定标记的值

时间:2015-07-15 22:30:40

标签: c# xml

我开始使用XML文件而且对此知之甚少。

我需要的是读取XML文件的某个标记的值

df$ output <- +as.logical(ave(as.character(df$ROI), df$ntrial, FUN=function(x) {rle(x[match("B",x):length(x)])$values[2] == "C"}))
#     subject ROI ntrial output
# 1    sbj05   A     78      1
# 2    sbj05   A     78      1
# 3    sbj05   A     78      1
# 4    sbj05   A     78      1
# 5    sbj05   A     78      1
# 6    sbj05   A     78      1
# 7    sbj05   B     78      1
# 8    sbj05   B     78      1
# 9    sbj05   C     78      1
# 10   sbj05   D     78      1
# 11   sbj05   E     78      1
# 12   sbj05   E     78      1
# 13   sbj05   E     78      1
# 14   sbj05   A    201      1
# 15   sbj05   A    201      1
# 16   sbj05   A    201      1
# 17   sbj05   A    201      1
# 18   sbj05   A    201      1
# 19   sbj05   B    201      1
# 20   sbj05   C    201      1
# 21   sbj05   D    201      1
# 22   sbj05   E    201      1
# 23   sbj05   E    201      1
# 24   sbj05   E    201      1
# 25   sbj05   F    201      1
# 26   sbj05   F    201      1
# 27   sbj05   A     10      0
# 28   sbj05   A     10      0
# 29   sbj05   A     10      0
# 30   sbj05   A     10      0
# 31   sbj05   B     10      0
# 32   sbj05   A     10      0
# 33   sbj05   C     10      0
# 34   sbj05   D     10      0
# 35   sbj05   E     10      0
# 36   sbj05   E     10      0
# 37   sbj05   A    400      0
# 38   sbj05   A    400      0
# 39   sbj05   A    400      0
# 40   sbj05   B    400      0
# 41   sbj05   A    400      0
# 42   sbj05   B    400      0
# 43   sbj05   C    400      0
# 44   sbj05   C    400      0
# 45   sbj05   C    400      0
# 46   sbj05   D    400      0
# 47   sbj05   E    400      0
# 48   sbj05   E    400      0
# 49   sbj05   D    400      0

在上面的示例中,我需要在名为&#34; PBAS&#34;的标签的&#34; Value&#34;(字符串TCCGA ...)之间获取字符串。用&#34; ID 1&#34;。

但是我只需要使用&#34; ID1&#34;从名为PBAS的标签中获取此值,因为XML文档具有其他&#34;值&#34;来自其他不同名称的标签。

非常感谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

/Tag/Value

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

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

以上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();

答案 2 :(得分:0)

您可以使用以下代码:

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;
  }
}