我正在尝试获取下面<data>
标记的值(这是一个测试值)。我在Windows窗体应用程序中使用XElement读取它。但是如果我使用element.Value
,我会得到一个包含孩子所有值的字符串。需要读取的最终XML文件是生成的XML文件。所以解决方案需要是动态的。没有固定名称。
element.Value
的结果是:This is a test value Jack22New YorkGuido21HollywoodMichael20BostonMy-Computer-1
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<data name="data_resource" howabout="no">
This is a test value
<persons>
<person>
<name>Jack</name>
<age>22</age>
<pob>New York</pob>
</person>
<person>
<name>Guido</name>
<age>21</age>
<pob>Hollywood</pob>
</person>
<person>
<name surname="Bats">Michael</name>
<age>20</age>
<pob>Boston</pob>
</person>
</persons>
<computers>
<computer>
<name>My-Computer-1</name>
<test>
<test2>
<test3>
<test4 testAttr="This is an attribute" y="68" x="132">
Hatseflatsen!
</test4>
</test3>
</test2>
</test>
</computer>
</computers>
</data>
有没有人有这方面的修复或解决方案,我只获得它自己的标签的价值,而不是他们所有的孩子?
答案 0 :(得分:1)
这将立即获取元素中的所有文本,而不是其后代的文本:
var textValues = element.Nodes()
.Where(n => n.NodeType == XmlNodeType.Text)
.Select(n => n.ToString().Trim());
string value = string.Join("", textValues); // value is: This is a test value
答案 1 :(得分:0)
使用xpath:
XmlDocument doc = new XmlDocument();
doc.Load(/*The path to your xml*/);
XmlNode root = doc.DocumentElement;
XmlNode node = root.SelectSingleNode("/data");
var v = node.FirstChild; //This contains "This is a test value"
答案 2 :(得分:0)
使用Linq2Xml,试试这个:
string xmlString = //read your XML or load the file using XDocument.Load();
XDocument doc = XDocument.Parse(xmlString);
System.Console.WriteLine(doc.Root.FirstNode);
这适用于所有情况,将doc.Root
替换为目标XElement
。