G|N|
Legacy Member
Hallo,
Ik heb de volgende XML:
en dit is mijn c# code:
Doe bedoeling is wanneer er <Elements> voorkomt met als parent <ElementOrGroup> een "(" te zetten en wanneer alle <Element> van de <Elements> zijn getoond een ")" te zetten.
De bedoeling is om de groupen te verdelen door ( element, element, element, )
Het eerste haakje werkt goed, maar het sluiten wilt maar niet lukken...
Hoe kan je in Xpath te weten komen dat we aan </Elements> zijn wanneer de parent van <Element> en <Elements> niet is veranderd?
Hopelijk is het duidelijk...
Ik heb de volgende XML:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<Categories>
<Category alphabet="A">
<Verb name="GetApplicationForRefund">
<Elements>
<Element name="Dossier" type="int" paramType="in"/>
<Element name="Product" type="int" paramType="in"/>
<Element name="MessageBoxes" type="string" paramType="in"/>
<ElementOrGroup>
<Elements>
<Element name="Version" type="int" paramType="out"/>
<Element name="Succes" type="boolean" paramType="out"/>
<Element name="IsReadOnly" type="boolean" paramType="out"/>
</Elements>
<Elements>
<Element name="MessageBoxes" type="string" paramType="out"/>
<Element name="Dossier" type="string" paramType="out"/>
</Elements>
</ElementOrGroup>
</Elements>
</Verb>
</Category>
</Categories>
en dit is mijn c# code:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Collections;
using System.Xml.XPath;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private XmlDocument xmldocVerb = new XmlDocument();
private XmlDocument xmldocStruct = new XmlDocument();
private XmlDocument xmldocEnum = new XmlDocument();
private StringReader readerVerb;
private StringReader readerStruct;
private StringReader readerEnum;
private XPathDocument docVerb;
private XPathDocument docStruct;
private XPathDocument docEnum;
private XPathNavigator navVerb;
private XPathNavigator navStruct;
private XPathNavigator navEnum;
private ArrayList verbs = new ArrayList();
private String verbDoc = "";
private bool b = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
XPathDocument doc = new XPathDocument("C:\\testgroup.xml");
XPathNavigator nav = ((IXPathNavigable)doc).CreateNavigator();
XPathNodeIterator iter = nav.Select("/Categories/Category/Verb");
while (iter.MoveNext())
{
textBox1.Text += iter.Current.Name + ": " + iter.Current.GetAttribute("name", "") + "\r\n";
XPathNodeIterator newIter = iter.Current.SelectDescendants(XPathNodeType.Element, false);
while (newIter.MoveNext())
{
XPathNavigator tmp = null;
XPathNavigator tmp2 = null;
tmp = newIter.Current.SelectSingleNode("../../../ElementOrGroup");
if (tmp != null && b == false)
{
textBox1.Text += "(";
b = true;
}
if (b == true)
{
tmp2 = newIter.Current.SelectSingleNode("Element[last()]");
if (tmp2 != null && tmp2.ComparePosition(newIter.Current).ToString() == "After")
{
textBox1.Text += ") \r\n";
b = false;
}
}
textBox1.Text += newIter.Current.GetAttribute("name", "") + "\r\n";
}
}
}
}
}
Doe bedoeling is wanneer er <Elements> voorkomt met als parent <ElementOrGroup> een "(" te zetten en wanneer alle <Element> van de <Elements> zijn getoond een ")" te zetten.
De bedoeling is om de groupen te verdelen door ( element, element, element, )
Het eerste haakje werkt goed, maar het sluiten wilt maar niet lukken...
Hoe kan je in Xpath te weten komen dat we aan </Elements> zijn wanneer de parent van <Element> en <Elements> niet is veranderd?
Hopelijk is het duidelijk...