2016-09-11 3 views
0

Ich habe unter Xsd-Datei.erhalten Attributwert von Xsd Knoten mit LINQ

<?xml version="1.0"?> 
<xs:schema xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" elementFormDefault="qualified" targetNamespace="http://allegrodevelopment.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <!--Warning: Schema changed to permit compilation in BizTalk project.--> 
    <xs:import schemaLocation=".\PriceIndexWS_development_com_PriceIndexDS.xsd" namespace="http://development.com/PriceIndexDS.xsd" /> 
    <xs:import schemaLocation=".\PriceIndexWS_development_com_PriceIndexDS.xsd" namespace="http://development.com/PriceIndexDS.xsd" /> 


<xs:element name="SelectCriteria"> 
    <xs:complexType > 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="DateColumn" type="xs:string" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="BegTime" type="xs:dateTime" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="EndTime" type="xs:dateTime" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="FilterByRelation" type="xs:boolean" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="FilterDateByRelation" type="xs:boolean" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="FilterByForeignKey" type="xs:boolean" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="DrillColumn" type="xs:string" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="DbCriteria" type="xs:string" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="DbJoin" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
     </xs:element> 


<xs:element name="pricevalue"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="priceindex" type="xs:string" /> 
       <xs:element msdata:DateTimeMode="Unspecified" name="pricedate" type="xs:dateTime" /> 
       <xs:element name="surrogate" type="xs:decimal" /> 
       <xs:element msdata:DateTimeMode="Unspecified" name="delivdate" type="xs:dateTime" /> 
       <xs:element name="delivtime" type="xs:decimal" /> 
       <xs:element name="price" type="xs:decimal" /> 
       <xs:element name="openprice" type="xs:decimal" /> 
       <xs:element name="highprice" type="xs:decimal" /> 
       <xs:element name="lowprice" type="xs:decimal" /> 
       <xs:element minOccurs="0" name="strikeprice" type="xs:decimal" /> 
       <xs:element minOccurs="0" name="callprice" type="xs:decimal" /> 
       <xs:element minOccurs="0" name="putprice" type="xs:decimal" /> 
       <xs:element minOccurs="0" name="source" type="xs:string" /> 
       <xs:element name="actualstatus" type="xs:string" /> 
       <xs:element minOccurs="0" name="gravity" type="xs:decimal" /> 
       <xs:element name="verifstatus" type="xs:boolean" /> 
       <xs:element minOccurs="0" name="daylightsaving" type="xs:boolean" /> 
       <xs:element name="creationname" type="xs:string" /> 
       <xs:element msdata:DateTimeMode="Unspecified" name="creationdate" type="xs:dateTime" /> 
       <xs:element minOccurs="0" name="revisionname" type="xs:string" /> 
       <xs:element msdata:DateTimeMode="Unspecified" minOccurs="0" name="revisiondate" type="xs:dateTime" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 

    </xs:schema> 

Ich möchte von xs:element Tag-Wert von name Attribut, um herauszufinden.

Ich habe den folgenden Code verwendet, es wirft Fehler werfen oder es ist null.

var data = XDocument.Load(path); 

var attrList = from item in data.Descendants().Elements() 
       where item.Attribute = "name" 
     select item; 

OR 
var attrlist = from d indata.Descendants().Elements("xs:element") 
Select(d => d.Attribute("name").Value).ToList(); 

beide wirft Fehler, bitte schlagen Sie vor, um die Werte zu erhalten.

Antwort

2

Verwenden

XNamespace xs = "http://www.w3.org/2001/XMLSchema"; 

und

List<string> values = data.Descendants(xs + "element").Attributes("name").Select(a => (string)a).ToList(); 

geben Sie alle Namen Werte aller xs:element Elemente zuschreiben. Wenn Sie nur die Top-Level-Elemente wollen, dann verwenden Sie

List<string> values = data.Root.Elements(xs + "element").Attributes("name").Select(a => (string)a).ToList(); 
+0

Danke für die Antwort. In der Werteliste wurde das gesamte Element mit Name-Tag ausgewählt. Es ist korrekt wie bei der Abfrage. Allerdings benötige ich nur die Werte von Elternelementen mit einem Namensschild, zB:, {SelectCriteria, pricevalue}. können wir die Abfrage ändern, um nur diese Elemente zu erhalten, da es die unnötige Iteration speichert, die ich durchführen muss, sobald ich die Werte in der Liste bekomme. – ankur

+0

Siehe die Bearbeitung, um nur auf 'data.Root.Elements (xs +" element ")' zuzugreifen. –

+0

Dank Bruder du bist ein Retter. Prost – ankur

Verwandte Themen