C#: Bestimmten Teil aus einer XML-Datei auslesen

fency

Grünschnabel
Hi Leute,

Ich bin leider totaler XML-Anfänger. Daher brauche ich eure Hilfe.
Ich habe eine XML aus der ich einen bestimmten Abschnitt auslesen möchte, diesen kann/möchte ich nur an Hand eines Parameters bestimmen, falls das so möglich ist.

Im konkreten Fall würde es um den Parameter P11012="30" gehen.
Wie kann ich an Hand dieser Auswahl, den ganzen Bereich der unter <04 Build .... fällt einlesen?

71snbqooucwi.png


Ich wäre für alle Tips oder Beispiele sehr dankbar.

mfg

fency
 
Hallo fency

Wie wärs mit einem XPath Ausdruck? Könnte mir zum Beispiel sowas vorstellen:
Code:
EplanPxfRoot/*[starts-with(name(), 'O') and *[starts-with(name(), 'P') and @P11012='30']]

Getroffene Annahmen:
Der gewünschte Node liegt gleich unter EplanPxfRoot, kann O<irgendwas> sein (also O4, O1124124, Oasdfaswerasdf, oder nur O), der Node mit dem Attribut P11012 mit dem Wert 30 liegt gleich unterhalb des O* Nodes und beginnt mit P. Kannst die Sachen ja nach Bedarf noch abändern.

Das ganze mit:
XPathDocument
XPathNavigator

Viele Grüsse
Cromon
 
Hallo Zusammen,

Hätte zu diesem thema auch ein Problem,´.

Bin neu in der XML Branche. Ich bin an einem Programm wo ich eine bestimmte Stelle in der XML auslesen möchte und einen bestimmten Wert verändern will. Dies soll das aus einer Textbox ausgelesen werden und direkt ersetzt werden.
Bin bis jetzt soweit gekommen.
Kann mir da jemand helfen ?

Mein code sieht folgendermaßen aus.:
C#:
private async void btn4_Start_Click_2(object sender, RoutedEventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("K:\\MAM\\DevExpress\\cs proj datei.v16.2.xml");

            Console.WriteLine("Nodes");
            foreach (XmlNode node in doc.DocumentElement.ChildNodes)
            {
                string text = node.Name; //or loop through its children as well
                Console.WriteLine("ItemGroup:" + text);
                foreach (XmlNode unterknoten in node)
                {
                    string text1 = unterknoten.Name; //or loop through its children as well
                    Console.WriteLine("Refernence:" + text1);


                    XmlNode Reference = doc.SelectSingleNode("/ProbertyGroup/ItemGroup[@Title='include']");
                    if (Reference != null)
                        Reference.Attributes["include"].InnerText = ".v15.1";
                    doc.Save("K:\\Test100.xml");                  
            }

Die XML sieht so aus.:
XML:
<?xml version="1.0" encoding="UTF-8"?>

-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="12.0">
<Import Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"/>
+<PropertyGroup>
+<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+<PropertyGroup>
+<PropertyGroup>
-<ItemGroup>
-<Reference Include="DevExpress.Charts.v15.1.Core, Version=15.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Assemblies\DevExpress.Charts.v15.1.Core.dll</HintPath>
Die Fettmakierten sollen geändert werden und vorher aus einer Textbox ausgelesen werden was dann automatisch in der XML ersetzt wird.



Vielen Dank für eure Hilfe!
 
Zuletzt bearbeitet von einem Moderator:
Schau dir mal XSL an.
Denke mir darüber wäre die sauberste Lösung
(hab aber selbst auch noch nicht so viel mit gemacht)
 
Zurück