Linq to XML Parsing Help - 获取元素?

时间:2011-04-26 14:04:20

标签: c# linq-to-xml

鉴于以下内容:

- <ArrayOfWsParcelDocIndexIAS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsParcelDocIndexIAS>
  <locatorNum xmlns="http://xxx/webservices/wsDocumentIndex/">131312</locatorNum> 
  <docType xmlns="http://xxx/webservices/wsDocumentIndex/">KIOOLX_DOCINDEX</docType> 
  <docID xmlns="http://xxx/webservices/wsDocumentIndex/">234234</docID> 
  <docName xmlns="http://xxx/webservices/wsDocumentIndex/">Document - 7/1/2008</docName> 
  <fileExists xmlns="http://xxx/webservices/wsDocumentIndex/">true</fileExists> 
  <fileFormat xmlns="http://xxx/webservices/wsDocumentIndex/">PDF</fileFormat> 
  </wsParcelDocIndexIAS>
- <wsParcelDocIndexIAS>
  <locatorNum xmlns="http://xxx/webservices/wsDocumentIndex/">131312</locatorNum>

我正在尝试使用

检索每个元素
var documentElements = from docels in root.Elements("wsParcelDocIndexIAS") select docels;

然后

 foreach (XElement documentElement in documentElements)
            {
                XElement id = documentElement.Element("locatorNum");
                XElement file_type = documentElement.Element("fileFormat");

然而,当id和file_type为null时,我使用的语法是尝试获取它们的值。

我在这里做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

您没有指定命名空间。试试这个:

XNamespace ns = "http://xxx/webservices/wsDocumentIndex/";
foreach (XElement documentElement in documentElements)
{
    XElement id = documentElement.Element(ns + "locatorNum");
    XElement file_type = documentElement.Element(ns + "fileFormat");
    ...
}

答案 1 :(得分:1)

XML中的元素位于命名空间"http://xxx/webservices/wsDocumentIndex/"中,但是您为Element方法提供的名称不是。您需要使用XName和名称创建namespace(此处有一个重载的+运算符):

XNamespace ns = "http://xxx/webservices/wsDocumentIndex/";
foreach (XElement documentElement in documentElements)
{
    XElement id = documentElement.Element(ns + "locatorNum");
    XElement file_type = documentElement.Element(ns + "fileFormat");
    // ...