2016-06-08 3 views
0

ich auf diese mit C# .net gerade arbeite VS 2013Erstellen von XML-Knoten dynamisch sein Attribut zu holen Werte

habe ich ein Szenario, in dem ich, wie unten die Struktur habe,

<td> 
    <text text="abc">abc 
    <tspan text = "bcd">bcd 
     <tspan text = "def">def 
      <tspan text = "gef">gef 
      </tspan> 
     </tspan> 
    </tspan> 
    </text> 
</td> 

Wie oben gezeigt, weiß ich nicht, wie viele tspan Knoten dort sein werden, momentan habe ich 3, ich kann 4 oder mehr bekommen.

Sobald die Textknoten nach dem Auffinden, den Wert dieses Knotens zu bekommen ich den Code verwenden werden,

labelNode.Attributes["text"].Value 

seinen benachbarten tspan Knoten zu bekommen, ich habe es zu benutzen, wie

labelNode.FirstChild.Attributes["text"].Value 

zu seinen benachbarten tspan Knoten zu bekommen, ich habe es zu benutzen, wie

labelNode.FirstChild.FirstChild.Attributes["text"].Value 

wie diese es auf dem gehen zu halten.

Nun meine Frage ist, wenn ich weiß, dass ich 5-Tags haben, ist es eine Möglichkeit, dynamisch hinzufügen „first“ 5 mal auf „labelNode“, so dass ich den Textwert des letzten Knotens erhalten, wie diese

Wenn ich 2. Wert brauche, muss ich es 2 mal hinzufügen, wenn ich 3. brauche, dann muss ich es dreimal hinzufügen.

Bitte lassen Sie mich wissen, gibt es eine Lösung dafür.

Bitte fragen Sie mich, wenn Sie mit meiner Frage verwirrt waren.

Vielen Dank im Voraus.

Antwort

1

Rather FirstChild dynamisch als das Hinzufügen, ich denke, das eine einfachere Lösung wäre:

static XmlNode GetFirstChildNested(XmlNode node, int level) { 
    XmlNode ret = node; 
    while (level > 0 && ret != null) { 
     ret = ret.FirstChild; 
     level--; 
    } 
    return ret; 
} 

Dann können Sie diese Funktion wie folgt verwendet werden:

var firstChild5 = GetFirstChildNested(labelNode, 5); 
+0

Danke für den Beitrag @Paolo, löste es mein Problem. –

1

Ich würde vorschlagen Linq zu Xml mit der hat eine sauberere Art zu analysieren Xml

Mit XElement (oder XDocument) können Sie die Hierarchie abflachen, indem Sie die Methode aufrufen und alle erforderlichen Abfragen durchführen.

ex.. 

XElement doc= XElement.Load(filepath);  
var results =doc.Descendants() 
       .Select(x=>(string)x.Attribute("text")); 

//which returns 
abc, 
bcd, 
def, 
gef 

Wenn Sie das letzte Kind bekommen möchten, können Sie einfach verwenden.

ex.. 

XElement doc= XElement.Load(filepath);  
doc.Descendants()     
    .Last() // get last element in hierarchy. 
    .Attribute("text").Value 

Wenn Sie ein drittes Element erhalten möchten, könnten Sie so etwas tun.

XElement doc= XElement.Load(filepath);  
doc.Descendants()     
    .Skip(2) // Skip first two. 
    .First() 
    .Attribute("text").Value ; 

Sehen Sie sich diese Demo

Verwandte Themen