I am using XmlDocument()
for parsing a file like **.opf ** for my application of EpubReader.
<item id="W01MB154" href="01MB154.html" media-type="application/xhtml+xml" />
<item id="W000Title" href="000Title.html" media-type="application/xhtml+xml" />
with
<itemref idref="W000Title" />
<itemref idref="W01MB154" />
These values in same file.
Here I know the value of id within the tag of item, after that I want to know the value of the href element.
What I have to do is compare the value idref element in the itemref tag with element value of id in the tag item. Here I know the id value which is W01MB154.
Simply, I want to know the next value of id which is href element, Using XmlDocument().
You may start with the following code. When I execute it, I get proper output:
string str = @"<?xml version='1.0' encoding='UTF-8'?><root><items><item id='W01MB154' href='01MB154.html' media-type='application/xhtml+xml' /><item id='W000Title' href='000Title.html' media-type='application/xhtml+xml' /></items><itemrefs><itemref idref='W000Title' /><itemref idref='W01MB154' /></itemrefs></root>";
XmlDocument xml = new XmlDocument();
xml.LoadXml(str); // suppose that str string contains the XML data. You may load XML data from a file too.
XmlNodeList itemRefList = xml.GetElementsByTagName("itemref");
foreach (XmlNode xn in itemRefList)
{
XmlNodeList itemList = xml.SelectNodes("//root/items/item[@id='" + xn.Attributes["idref"].Value + "']");
Console.WriteLine(itemList[0].Attributes["href"].Value);
}
Output:
000Title.html
01MB154.html
The XML used is:
<?xml version='1.0' encoding='UTF-8'?>
<root>
<items>
<item id='W01MB154' href='01MB154.html' media-type='application/xhtml+xml' />
<item id='W000Title' href='000Title.html' media-type='application/xhtml+xml' />
</items>
<itemrefs>
<itemref idref='W000Title' />
<itemref idref='W01MB154' />
</itemrefs>
</root>
Check the structure of the XML document and the XPath expression.
Following code loads and parses content.opf file without any error.
To iterate and compare above xml you may use following code:
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("content.opf");
XmlNodeList items = xDoc.GetElementsByTagName("item");
foreach (XmlNode xItem in items)
{
string id = xItem.Attributes["id"].Value;
string href= xItem.Attributes["href"].Value;
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}