Umwelt:Wie auf einem maximalen Kind Elementwert in XPath 1.0 (C#, WPF) mehrere Knoten basierend auszuwählen
- eine WPF-Anwendung schreiben C# (und Visual Studio 2015)
- Beschränkt auf XPath 1,0
Ziel: ich brauche mehr spezifischen XML-Knoten aus einem XML-Dokument basierend auf dem Wert eines untergeordnetes Elements innerhalb des spezifischen Knoten
Situation so weit wählen: Derzeit habe ich mehrere XPath-Abfragen, die einzelne Knoten auswählen und den Wert von Attributen und Elementen abrufen. Der, mit dem ich Probleme habe, ist unten gezeigt.
var xUsageSummary = xDoc.XPathSelectElements("
/root
/table[not(contains(@tagname,'pole'))]
/*[not(maximum_usage < ../*/maximum_usage)]");
Edited modifizierten table
und maximum_usage
aktualisiert, um anzuzeigen Es scheint, dass das Problem aus dem letzten Abschnitt des XPath-String kommt, an den ../*/maximum_usage
. Während die Elemente, die ausgewählt werden, durch das Prädikat not(contains(@tagname,'pole'))
gefiltert werden, denke ich, dass ../*/maximum_usage
nicht die richtigen Daten basierend auf dem Filter erhält. Vielleicht sollte die *
durch etwas ersetzt werden, das den Namen des Elements darstellen würde, von dem der Wert maximum_usage
genommen wird.
<root>
<table tagname="summary_of_brace_usages">
<summary_of_brace_usages>
<brace_label>brace1</brace_label>
<maximum_usage>55.00</maximum_usage>
<load_case>CaseA</load_case>
</summary_of_brace_usages>
<summary_of_brace_usages>
<brace_label>brace2</brace_label>
<maximum_usage>70.00</maximum_usage>
<load_case>CaseA</load_case>
</summary_of_brace_usages>
</table>
<table tagname="summary_of_pole_usages">
<summary_of_pole_usages>
<pole_label>pole1</pole_label>
<maximum_usage>23.63<maximum_usage>
<load_case>CaseB<load_case>
</summary_of_pole_usages>
<summary_of_pole_usages>
<pole_label>pole1</pole_label>
<maximum_usage>85.25<maximum_usage>
<load_case>CaseB<load_case>
</summary_of_pole_usages>
</table>
<table tagname="summary_of_x_arm_usages">
<summary_of_x_arm_usages>
<brace_label>xarm1</brace_label>
<maximum_usage>42.00</maximum_usage>
<load_case>CaseA</load_case>
</summary_of_x_arm_usages>
<summary_of_x_arm_usages>
<brace_label>xarmA</brace_label>
<maximum_usage>95.00</maximum_usage>
<load_case>CaseA</load_case>
</summary_of_x_arm_usages>
</table>
</root>
Edited XML modifizierten Probe zeigen
Die gewünschte Ausgabe von dem XML-Beispiel oben sollte ein IEnumerable sein, die zwei XElements enthält;
/root/table/summary_of_brace_usages //(where @maximum_usage 70, because it is the largest "maximum_usage" value)
und
/root/table/summary_of_x_arm_usages //(where @maximum_usage is 95, because it is the largest "maximum_usage" value)
Nachdem die richtige IEnumerable zurückgegeben wird, kann ich die anderen Elementwerte erhalten und sie zu Variablen schreiben und schließlich Eigenschaften einer Klasse, so dass sie in ein gesetzt werden FlowDocument zum Drucken mit meiner WPF-Anwendung.
Jede Hilfe wird sehr geschätzt und ich werde froh sein, alle zusätzlichen Informationen zu geben, wenn es gebraucht wird - danke im Voraus!
Thank Sie für den nützlichen Rat. Ich habe alles geändert, um deine Antwort widerzuspiegeln, und es gibt tatsächlich etwas zurück, also ist es gut. Leider scheint es, dass ich meinen Beispielcode so stark vereinfacht habe, dass ein wichtiger Faktor weggelassen wurde. Ich werde meinen ursprünglichen Beitrag aktualisieren, um die Änderung anzuzeigen. –