5

我查看了很多资源,进行了大量研究,并尝试了许多“最佳猜测”来使用 WebMatrix 和 C#、网页一次访问单个元素,但是我没有尝试通过。

考虑一个如下所示的简单 xml 文档:

<root>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
</root>

我知道我可以使用 foreach 循环,如下所示:

@using System.Xml.Linq

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

foreach (XElement element in doc.Descendants("requisitionData"))
{
    @element.Value
}

当然,这很好用。但是,如果我只是想将单个元素<element1>的值存储在字符串变量中呢?

我看过这里(下面的链接),但我无法对这段代码做出正面或反面(在我看来,它甚至几乎不像 C#,但话又说回来,我对解析 XML 很陌生......):

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b14ce4d1-77f1-420d-ad91-0989794a1d45/

我也在这里检查过:How to Get XML Node from XDocument

但是这里显示的代码对我来说也没有任何意义。我一直认为必须有一种更简单的方法来做到这一点,希望不需要学习一种全新的查询方法。

---------------------------------我尝试过的事情------------ ---------------------

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

string element = doc.Descendants("requisitionData").Descendants("element1").Value;

我收到错误: “缺少使用指令或程序集引用

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

XElement element = doc.Descendants("element1");
string val = element.Value;

我收到的错误: 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Xml.Linq.XElement”。存在显式转换(您是否缺少演员表?)

事实上,我已经尝试过其他的东西,但我得到了与上面显示的几乎相同的错误。我是不是让这件事变得更难了,还是我过于简单化了?

- - - - - - - - - - - - -更新 - - - - - - - - - - - - ------

我能够让它工作:

string element = doc.Element("root").Element("requisitionData").Element("element1").Value;

@element

但是,我担心这种方法的一件事是.Element选择“第一个”匹配项,因此在一个看起来像这样的 xml 文档中:

<root>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
</root>

我怎样才能访问第二次出现的<element1>

4

1 回答 1

5
@using System.Xml.Linq

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

foreach (XElement element in doc.Element("root").Element("requisitionData").Descendants())
{
    string value = element.Value;
}

或使用 XPath:

@using System.Xml.Linq
@using System.Xml.XPath

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

foreach (XElement element in doc.XPathSelectElement("//requisitionData").Descendants())
{
    string value = element.Value;
}

更新:

如果您想<element1>从更新的示例中选择第二个节点:

string value = doc.XPathSelectElement("//requisitionData[2]/element1").Value;
于 2013-04-09T13:57:17.290 回答