robert101083
Nieuwe gebruiker
- Lid geworden
- 25 jan 2015
- Berichten
- 2
Ik heb een stuk XML, dit komt uit een applicatie dus ik kan niets doen aan de opmaak. Ik wil de attributen uitlezen, een berekening toepassen en daarna de uitkomt, de huidige waarden laten overschrijven.
De waarden in elke LineTo-rij vormen de coordinaten van de hoekpunten van een rechthoek, ik moet een bekerening toepassen op de gehele rechthoek, de nieuwe coordinaten terugschrijven naar de XML.
Voor de berekening heb ik dus de waarden nodig van meerdere attributen tegelijk. Dus een waarde van bijvoorbeeld de eerste X + 5 en weer opslaan gaat niet.
Het aantal MoveTo met de bijbehorende 4 LineTo nodes kan varrieren. In dit voorbeeld staan de coordinaten van 2 rechthoeken, dus kunnen er bijvoorbeeld ook 1 of 3 zijn.
In het laatste CODE-blok zien jullie dat ik de XML uitlees en via de switch de type regels kan onderscheiden in MoveTo en LineTo. Zodra ik 1 x een MoveTo heb, kan ik wel nog 4 x door de loop gaan en de LineTo waarden (als double) ophalen. De berekening op alles toepassen, een nieuwe stuk text maken in de vorm van een string die er dat uitziet als het huidige stuk XML maar dan met de nieuwe coordinaten.
Hiermee sla ik natuurlijk helemaal de plank mis, wanneer ik dit in een string doe. Hoe kan ik dit het beste aanpakken? En hoe vervang ik dan de oude Outline Node in mijn bestand met de nieuwe?
(De berekening zelf is verder geen probleem.)
Dit haal ik netjes op via:
De waarden in elke LineTo-rij vormen de coordinaten van de hoekpunten van een rechthoek, ik moet een bekerening toepassen op de gehele rechthoek, de nieuwe coordinaten terugschrijven naar de XML.
Voor de berekening heb ik dus de waarden nodig van meerdere attributen tegelijk. Dus een waarde van bijvoorbeeld de eerste X + 5 en weer opslaan gaat niet.
Het aantal MoveTo met de bijbehorende 4 LineTo nodes kan varrieren. In dit voorbeeld staan de coordinaten van 2 rechthoeken, dus kunnen er bijvoorbeeld ook 1 of 3 zijn.
In het laatste CODE-blok zien jullie dat ik de XML uitlees en via de switch de type regels kan onderscheiden in MoveTo en LineTo. Zodra ik 1 x een MoveTo heb, kan ik wel nog 4 x door de loop gaan en de LineTo waarden (als double) ophalen. De berekening op alles toepassen, een nieuwe stuk text maken in de vorm van een string die er dat uitziet als het huidige stuk XML maar dan met de nieuwe coordinaten.
Hiermee sla ik natuurlijk helemaal de plank mis, wanneer ik dit in een string doe. Hoe kan ik dit het beste aanpakken? En hoe vervang ik dan de oude Outline Node in mijn bestand met de nieuwe?
(De berekening zelf is verder geen probleem.)
Code:
<Outline>
<MoveTo X="1344.64" Y="2576.58"/>
<LineTo X="1344.64" Y="1299.01"/>
<LineTo X="11.43" Y="1299.01"/>
<LineTo X="11.43" Y="2576.58"/>
<LineTo X="1344.64" Y="2576.58"/>
<MoveTo X="1344.64" Y="1289.01"/>
<LineTo X="1344.64" Y="11.43"/>
<LineTo X="11.43" Y="11.43"/>
<LineTo X="11.43" Y="1289.01"/>
<LineTo X="1344.64" Y="1289.01"/>
<Method Type="Thru-cut"/>
</Outline>
Dit haal ik netjes op via:
Code:
string fileName = @"..\..\..\..\test.zcc";
xmlDoc.Load(fileName);
XmlNodeList outlineNodes = xmlDoc.SelectNodes("/ZCC_cmd/Job/Geometry/Outline/*");
foreach (XmlNode outlineNode in outlineNodes)
{
nodeName = outlineNode.Name;
if (outlineNode.Name != "Method")
{
x = Convert.ToDouble(outlineNode.Attributes["X"].Value);
y = Convert.ToDouble(outlineNode.Attributes["Y"].Value);
Console.WriteLine("nodeName.Name: " + nodeName + " X: " + x + " Y: " + y);
}
switch (nodeName)
{
case "MoveTo":
// Doe iets
break;
case "LineTo":
// Doe iets
break;
default:
break;
}
}
}