myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Auslesen bestimmter Attribut-Werte aus einer XML-Datei über Linq to XML
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Auslesen bestimmter Attribut-Werte aus einer XML-Datei über Linq to XML

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
macky92 macky92 ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.09.2017
Beiträge: 2
Entwicklungsumgebung: Visual Studio 2012


macky92 ist offline

Auslesen bestimmter Attribut-Werte aus einer XML-Datei über Linq to XML

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi Leute,

ich bin noch relativ neu in dem Forum und auch in der C# Programmierung und bräuchte mal eure Hilfe.

Ich versuche aus einer XML 2 bestimme Werte auszulesen. Und zwar die Werte aus dem Element "Geometrie" -> "Left" & "Top" .

Hier die XML dazu.

XML-Code:
<Objekt name="Rechteck1">
          <Gruppe name="Blinken">
            <Property name="FlashBorderColor">0</Property>
            <Property name="BorderFlashColorOff">16776960</Property>
            <Property name="BorderFlashColorOn">255</Property>
            <Property name="FlashRateBorderColor">1</Property>
            <Property name="FlashBackColor">0</Property>
            <Property name="BackFlashColorOff">65280</Property>
            <Property name="BackFlashColorOn">16776960</Property>
            <Property name="FlashRateBackColor">1</Property>
          </Gruppe>
          <Gruppe name="Darstellung">
            <Property name="GlobalShadow">1</Property>
            <Property name="GlobalColorScheme">1</Property>
            <Property name="Transparency">0</Property>
          </Gruppe>
          <Gruppe name="Farben">
            <Property name="BorderColor">0</Property>
            <Property name="BorderBackColor">16777215</Property>
            <Property name="BackColor">8421504</Property>
            <Property name="FillColor">65280</Property>
          </Gruppe>
          <Gruppe name="Fuellen">
            <Property name="Filling">0</Property>
            <Property name="FillingIndex">0</Property>
            <Property name="FillingDirection">0</Property>
          </Gruppe>
          <Gruppe name="Geometrie">
            <Property name="Left">40</Property>
            <Property name="Top">110</Property>
            <Property name="Width">450</Property>
            <Property name="Height">90</Property>
          </Gruppe>
          <Gruppe name="Objekt">
            <Property name="ObjectName">Rechteck1</Property>
            <Property name="Layer">0</Property>
          </Gruppe>
          <Gruppe name="Sonstiges">
            <Property name="Operation">1</Property>
            <Property name="PasswordLevel">0</Property>
            <Property name="Visible">1</Property>
            <Property name="ToolTipText" />
          </Gruppe>
          <Gruppe name="Stile">
            <Property name="BorderWidth">1</Property>
            <Property name="BorderStyle">0</Property>
            <Property name="FillStyle">0</Property>
            <Property name="DrawInsideFrame">1</Property>
          </Gruppe>
        </Objekt>

Hier mein Quellcode dazu:

C#-Code:
                //XML einlesen
                element = XElement.Load(file);

                var x = from xEle in element.Descendants("Geometrie")
                           where xEle.Attribute("Property name").Value == "Left"
                           select xEle;

                var x2 = from xEle in x.Elements("Left") select xEle;

Wobei ich hier nur einen der beiden Werte versuche auszulesen. Allerdings funktioniert es nicht, in der Variable x und x2 steht jeweils NULL.
Hat jemand eine Idee wie ich anders an die Werte rankomme und diese in einer Variable speicher kann? Die XML darf allerdings nicht verändert werden.

Vielen Dank vorab und beste Grüße.
11.09.2017 15:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1871.jpg


Dabei seit: 03.04.2006
Beiträge: 2.715
Entwicklungsumgebung: VS 2008 / VS 2017 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Naja, vielleicht, weil das Attribut "name" heisst und nicht "Property name".

LaTino
11.09.2017 15:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.319
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Property ist ein Child-Element des Elements Gruppe.
Und name ist ein Attribut des Element Property.

Aktuell fragst Du aber nach dem Attribut Property name des Elements Geometrie - also was völlig anderes.
11.09.2017 15:23 Beiträge des Benutzers | zu Buddylist hinzufügen
macky92 macky92 ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.09.2017
Beiträge: 2
Entwicklungsumgebung: Visual Studio 2012

Themenstarter Thema begonnen von macky92

macky92 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hab jetzt mal die 2 Varianten ausprobiert:

C#-Code:
where xEle.Element("Property").Attribute("name").Value == "Left"

C#-Code:
where xEle..Attribute("name").Value == "Left"

Leider steht in der Variable x weiterhin NULL.

Was wäre euer Vorschlag?
11.09.2017 15:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 10.319
Herkunft: Süddeutschland


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kann ebenfalls nicht stimmen, weil das Root Element (ich nehme an, dass xEle dies ist) kein Element mit der Eigenschaft Property hat.

Zudem müsste es Elements heissen, weil es mehrere sind, auf die Du die Abfrage setzt.
Warum Du Descants weg lässt, das ist mir ein Rätsel.
Das war quasi das einzige, was im ersten Schritt gestimmt hat ;-)

Les Dir einfach durch wie Linq2xml funktioniert statt planlos rumzuprobieren :-)
Du musst es schließlich verstehen, was Du da machst.
11.09.2017 15:40 Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1871.jpg


Dabei seit: 03.04.2006
Beiträge: 2.715
Entwicklungsumgebung: VS 2008 / VS 2017 / VS Code
Herkunft: Thüringen


LaTino ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
var result =
    xDoc
    .Descendants("Gruppe")
    .Where(p => p.Attribute("name") != null && p.Attribute("name").Value == "Geometrie")
    .Select(ParseRectangle)
    .ToArray();
private static Rectangle ParseRectangle(XElement element)
{
    throw new NotImplementedException();
}

Sollte als Denkanstoß reichen.

LaTino

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am 11.09.2017 15:48.

11.09.2017 15:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2017 myCSharp.de-Team. Alle Rechte vorbehalten. 20.09.2017 02:28