XML获取没有子级值的标记值

时间:2013-11-12 08:55:31

标签: c# xml xelement

我正在尝试获取下面<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>

有没有人有这方面的修复或解决方案,我只获得它自己的标签的价值,而不是他们所有的孩子?

3 个答案:

答案 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