1

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

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

4

3 回答 3

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
于 2013-11-12T09:10:01.743 回答
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"
于 2013-11-12T09:05:38.720 回答
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.

于 2013-11-12T09:08:17.637 回答