2011-11-16 60 views
0

我從包含幾個命名空間的XML文件導入一些數據。我使用嵌套類來導入不同級別的數據。不幸的是我無法訪問內部類中的數據。我知道問題是關於命名空間的,但我不知道如何在不修改內部類的情況下解決它們。有誰知道我如何解析XDocument中的命名空間。在XDocument中解析命名空間c#

這是XML的一部分:

<TransXChange xmlns="http://www.transxchange.org.uk/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails" 
xsi:schemaLocation="http://www.transxchange.org.uk/ http://www.transxchange.org.uk/schema/2.1/TransXChange_registration.xsd" 
xml:lang="en" CreationDateTime="2004-06-09T14:20:00-05:00" 
> 
    <Operators> 
     <LicensedOperator id="O1" > 
      <NationalOperatorCode>ABC</NationalOperatorCode> 
      <OperatorAddresses> 
       <CorrespondenceAddress> 
        <apd:Line>45 City Road</apd:Line> 
       </CorrespondenceAddress> 
      </OperatorAddresses> 
     </LicensedOperator> 
    </Operators> 
</TransXChange> 
+1

在這裏簡單的搜索SO應該告訴你解決方案 – BrokenGlass

回答

0

你需要告訴解析器如何引用命名空間:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlElem.OwnerDocument.NameTable); 
nsmgr.AddNamespace("apd", "http://[PATH_TO_NAMESPACE_DOC]"); 

應該這樣做

+0

如果這解決了你的問題,你可以請標記爲答案嗎? –

+0

我想知道是否有任何方法來解決XDocumet中的名稱空間:XDocument doc = new XDocument(); doc = XDocument.Load(filename); – Hashem

+0

不是我所知道的。使用'XmlNamespaceManager'有問題嗎? –

2

你必須使用與XML中使用的名稱空間相匹配,使用Linq to XML,您可以使用XNamespace即:

XDocument doc = XDocument.Load("test.xml"); 
XNamespace apd = "http://www.govtalk.gov.uk/people/AddressAndPersonalDetails"; 
var firstHit = doc.Descendants(apd + "Line").First();