如何在LINQ阅读从一个的XElement特定元素值XML(How to Read a specif

2019-06-25 01:01发布

我有一个XElement其中有这样的内容。

<Response xmlns="someurl" xmlnsLi="thew3url">
   <ErrorCode></ErrorCode>
   <Status>Success</Status>
   <Result>
       <Manufacturer>
            <ManufacturerID>46</ManufacturerID>
            <ManufacturerName>APPLE</ManufacturerName>
       </Manufacturer>
      //More Manufacturer Elements like above here
   </Result>
</Response>

我将如何读里面的价值Status元素?

我尝试XElement stats = myXel.Descendants("Status").SingleOrDefault(); 但这种情况正在返回null。

Answer 1:

XElement response = XElement.Load("file.xml"); // XElement.Parse(stringWithXmlGoesHere)
XNamespace df = response.Name.Namespace;
XElement status = response.Element(df + "Status");

应该足以进入Status子元素。 如果你想要的元素作为一个字符串值,然后做如

string status = (string)response.Element(df + "Status");


Answer 2:

如果myXel已经是响应XElement那么这将是:

var status = myXel.Elements().Where(e => e.Name.LocalName == "Status").Single().Value;

你需要如何使用localName忽略的命名空间。



Answer 3:

有些TextReaders知道,很快就会有更多的数据,但不是所有的字符现在是可用的。 如果你问10个字符,现在有只有4个字符,但其他的人将成为在几秒钟内可用,那么它可能是明智的回报,而不是等待所有10个字符的4个可用字符。

一个例子可能是一个TextReader是bufferst从一个串口数据:这将是太慢了,等到所有要求的字符可用,因此它会返回,现在已经上市的所有字符。

你可以看到之间的差TextReader.Read(char[], int, int)TextReader.ReadBlock(char[], int, int)在返回值的描述:

TextReader.Read

返回:被读取的字符已经读取0,如果在流的末尾和数量,或者没有数据。 的数量将小于或等于计数参数,这取决于是否是流中可用的数据。

TextReader.ReadBlock

返回:已读取的字符数。 数量将小于或等于计数,这取决于是否所有的输入字符都被读取。

如果你问一个TextReaderRead 10个字符, Read是允许的,如果读者认为,这是不明智的等待所有10个字符少于10个字符返回。 只要读者知道,仍然有字符,它会等待至少一个字符。 如果Read返回4个字节被读取,那么你不知道,如果最后一个字符被读取。 只有当Read返回零,你知道有什么可以再阅读。 这允许的TextReader现在返回可用字符,而无需等待所有10个字符变为可用。

ReadBlock会等到所有10个字节是可用的(或EOF)。 所以,一个缓慢的读者可能会阻止你的程序的时间比你的愿望。

要确定您已经阅读所有字符,请使用“读repeatedly until you get a zero return; Use repeatedly until you get a zero return; Use直到你读少字节比请求ReadBlock`反复。



文章来源: How to Read a specific element value from XElement in LINQ to XML