2009-10-20 28 views
5

Tôi không thể hiểu tại sao NodeList này đang rỗngXmlNodeList (tại sao là trống này)

XmlDocument document = new XmlDocument(); 
document.Load(xmlpath);  
XmlNodeList nodes = document.SelectNodes("/StructureResponse/rootItem/attributes/Attribute"); 

Ở đây xmlFile

<?xml version="1.0" encoding="utf-8"?> 
<StructureResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://nts-de-osm1-pxc/webservices/"> 
    <consolidatedItems xsi:nil="true" xmlns="http://systinet.com/wsdl/com/osm/webservices/service/" /> 
    <rootItem xsi:type="Part" xmlns="http://systinet.com/wsdl/com/osm/webservices/service/"> 
     <attributes> 
      <Attribute> 
       <dataDictionary xsi:nil="true" /> 
       <dataType>string</dataType> 
       <displayName>IDENT_NR</displayName> 
       <key>true</key><name>IDENT_NR</name> 
       <searchable>true</searchable> 
       <userAttribute>true</userAttribute> 
       <value>9662744</value> 
      </Attribute> 
      <Attribute> 
       <dataDictionary xsi:nil="true" /> 
       <dataType>string</dataType> 
       <displayName>AI</displayName> 
       <key>true</key><name>AI</name> 
       <searchable>true</searchable> 
       <userAttribute>true</userAttribute> 
       <value>00</value> 
      </Attribute> 
     </rootItem> 
    </StructureResponse> 

Trong Script cuối cùng tôi muốn để có được một chuỗi mảng chứa mọi thuộc tính trong đó.

Cảm ơn bạn Stefan

Trả lời

3

tài marc_s là thực sự chính xác. Bạn cần phải chú ý đến các không gian tên XML. Mẫu mã của ông, tuy nhiên, sẽ không làm việc trực tiếp cho ví dụ của bạn. Đây là một mẫu đầy đủ hoạt động với XML mà bạn đã cung cấp (mặc dù tôi phải dọn sạch nó ... nó thiếu thẻ đóng cho attributes).

string xmlData = 
@"<?xml version='1.0' encoding='utf-8'?> 
    <StructureResponse 
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
    xmlns='http://nts-de-osm1-pxc/webservices/'> 
    <consolidatedItems xsi:nil='true' xmlns='http://systinet.com/wsdl/com/osm/webservices/service/' /> 
    <rootItem xsi:type='Part' xmlns='http://systinet.com/wsdl/com/osm/webservices/service/'> 
     <attributes> 
     <Attribute> 
      <dataDictionary xsi:nil='true' /> 
      <dataType>string</dataType> 
      <displayName>IDENT_NR</displayName> 
      <key>true</key> 
      <name>IDENT_NR</name> 
      <searchable>true</searchable> 
      <userAttribute>true</userAttribute> 
      <value>9662744</value> 
     </Attribute> 
     <Attribute> 
      <dataDictionary xsi:nil='true' /> 
      <dataType>string</dataType> 
      <displayName>AI</displayName> 
      <key>true</key> 
      <name>AI</name> 
      <searchable>true</searchable> 
      <userAttribute>true</userAttribute> 
      <value>00</value> 
     </Attribute> 
     </attributes> 
     </rootItem> 
    </StructureResponse>"; 

XmlDocument document = new XmlDocument(); 
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(document.NameTable); 
namespaceManager.AddNamespace("a", "http://nts-de-osm1-pxc/webservices/"); 
namespaceManager.AddNamespace("b", "http://systinet.com/wsdl/com/osm/webservices/service/"); 
document.LoadXml(xmlData); 
XmlNodeList nodes = document.SelectNodes("/a:StructureResponse/b:rootItem/b:attributes/b:Attribute", namespaceManager); 
// 'nodes' contains 2 items now, as expected 

Tôi khuyên bạn nên nghiên cứu thêm một chút về không gian tên XML. Thử lướt qua Ronald Bourret's "XML Namespaces FAQ".

+0

+1 liên kết tốt cho các không gian tên XML FAQ! Cảm ơn. –

8

Bạn không có tính đến không gian tên XML (xmlns="http://nts-de-osm1-pxc/webservices/") trên các tài liệu!

OK, bạn thậm chí có hai không gian tên riêng biệt - đã cập nhật mẫu của tôi.

Hãy thử điều này:

XmlDocument document = new XmlDocument(); 
document.Load(xmlpath);  

XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable); 
mgr.AddNamespace("ns", "http://nts-de-osm1-pxc/webservices/"); 
mgr.AddNamespace("root", "http://systinet.com/wsdl/com/osm/webservices/service/"); 

XmlNodeList nodes = document.SelectNodes("/ns:StructureResponse/root:rootItem/root:attributes/root:Attribute", mgr); 

Marc

+0

Thậm chí là 0 Tôi đã bỏ qua "xmlns" mọi lúc, vì vậy tôi chỉnh sửa Tệp XML ở trên. – sschnake

+0

Bạn đã đưa tôi đi đúng hướng. bể bạn – sschnake

+0

Vui vì tôi có thể giúp. –

0

Hãy thử: Câu trả lời

XmlNodeList nodes = document.SelectNodes("./StructureResponse/rootItem/attributes");

+0

Không .. Trống. Vì vậy, tôi sẽ đăng Mã Đầy đủ ngay bây giờ – sschnake

Các vấn đề liên quan