我开始使用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;来自其他不同名称的标签。
非常感谢!
答案 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.Xml
,System.Xml.XPath
和System.Xml.Linq
。另请阅读Linq2Xml和Xpath
答案 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;
}
}