I have an XML document that has a collection of objects. Each object has a key/value pair of label and value. I am trying to convert this into a DataSet, but when I do ds.ReadXml(xmlFile), then it creates two columns: label and value.
What I would like is to have a column for each "label" and the value to be part of the row. here is my sample of the XML:
<responses>
<response>
<properties id="1" Form="Account Request" Date="Tuesday, March 16, 2010 5:04:26 PM" Confirmation="True" />
<fields>
<field>
<label>Name</label>
<value>John</value>
</field>
<field>
<label>Email</label>
<value>John#Doe.com</value>
</field>
<field>
<label>Website</label>
<value>http://domain1.com</value>
</field>
<field>
<label>Phone</label>
<value>999-999-9999</value>
</field>
<field>
<label>Place of Birth</label>
<value>Earth</value>
</field>
<field>
<label>Misc</label>
<value>Misc</value>
</field>
<field>
<label>Comments</label>
<value />
</field>
<field>
<label>Agree to Terms?</label>
<value>True</value>
</field>
</fields>
</response>
<response>
<properties id="2" Form="Account Request" Date="Tuesday, March 17, 2010 5:04:26 PM" Confirmation="True" />
<fields>
<field>
<label>Name</label>
<value>John2</value>
</field>
<field>
<label>Email</label>
<value>John2#Doe.com</value>
</field>
<field>
<label>Website</label>
<value>http://domain2.com</value>
</field>
<field>
<label>Phone</label>
<value>999-999-9999</value>
</field>
<field>
<label>Place of Birth</label>
<value>Earth</value>
</field>
<field>
<label>Misc</label>
<value>Misc</value>
</field>
<field>
<label>Comments</label>
<value />
</field>
<field>
<label>Agree to Terms?</label>
<value>True</value>
</field>
</fields>
</response>
<response>
<properties id="3" Form="Account Request" Date="Tuesday, March 18, 2010 5:04:26 PM" Confirmation="True" />
<fields>
<field>
<label>Name</label>
<value>John3</value>
</field>
<field>
<label>Email</label>
<value>John3#Doe.com</value>
</field>
<field>
<label>Website</label>
<value>http://domain3.com</value>
</field>
<field>
<label>Phone</label>
<value>999-999-9999</value>
</field>
<field>
<label>Place of Birth</label>
<value>Earth</value>
</field>
<field>
<label>Misc</label>
<value>Misc</value>
</field>
<field>
<label>Comments</label>
<value />
</field>
<field>
<label>Agree to Terms?</label>
<value>True</value>
</field>
</fields>
</response>
<response>
<properties id="4" Form="Account Request" Date="Tuesday, March 19, 2010 5:04:26 PM" Confirmation="True" />
<fields>
<field>
<label>Name</label>
<value>John</value>
</field>
<field>
<label>Email</label>
<value>John4#Doe.com</value>
</field>
<field>
<label>Website</label>
<value>http://domain4.com</value>
</field>
<field>
<label>Phone</label>
<value>999-999-9999</value>
</field>
<field>
<label>Place of Birth</label>
<value>Earth</value>
</field>
<field>
<label>Misc</label>
<value>Misc</value>
</field>
<field>
<label>Comments</label>
<value />
</field>
<field>
<label>Agree to Terms?</label>
<value>True</value>
</field>
</fields>
</response>
</responses>
How would I convert this to a DataSet so that I can load it into a gridview with the columns: Name, Email, Website, Phone, Place of Birth, Misc, Comments, and Agree to Terms?
Then row 1 would be:
John, John#Doe.com, http://domain1.com, 999-999-9999, Earth, Misc, , True
How can I do this with the XML provided?
You're going to have to transform your data in order to use it the way you want. As you've seen, you have a bad structure.
I suggest that you create an empty dataset in Visual Studio (from Add->New Item), then set it to look the way you'd like it to look. Write some code to add a little test data, then write it to a file using DataSet.WriteXml. That will show you what your proposed structure would look like.
I then recommend that you use LINQ to XML to transform your input XML into the new format.
Here's an example of using LINQ to XML to transform your data:
public static void TransformIt(TextWriter output)
{
var inputDocument = XDocument.Parse(INPUT_XML);
if (inputDocument.Root == null)
{
return;
}
var doc = new XDocument(
new XElement(
"responses",
from response in inputDocument.Root.Elements()
select new XElement(
"response",
from lv in GetResponseLabels(response)
select MakeResponse(lv.Label, lv.Value))));
var settings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true,
};
using (var writer = XmlWriter.Create(output, settings))
{
if (writer == null)
{
return;
}
doc.WriteTo(writer);
}
}
private static XElement MakeResponse(string label, string value)
{
var trimmedLabel = label.Replace(" ", String.Empty).Replace("?", String.Empty);
return new XElement(trimmedLabel, value);
}
private static IEnumerable<LabelAndValue> GetResponseLabels(XContainer response)
{
var fieldsElement = response.Element("fields");
if (fieldsElement == null)
{
return null;
}
return from field in fieldsElement.Elements("field")
let valueElement = field.Element("value")
let labelElement = field.Element("label")
select new LabelAndValue
{
Label = labelElement == null ? "Unknown" : labelElement.Value,
Value = valueElement == null ? null : valueElement.Value
};
}
private struct LabelAndValue
{
public string Label { get; set; }
public string Value { get; set; }
}
I would iterate through the XML and depending on how you iterate (Linq is most flexible), create a new object(datatable, for instance) with your data described in the way you need.
I ended up changing the approach a bit and did this (pivots):
DataRow dr = dt.NewRow();
//TRANSFORM RESPONSE LABELS INTO COLUMNS
foreach (XmlNode fieldNode in currentXml.SelectNodes("response/fields/field"))
{
string label = fieldNode.SelectSingleNode("label").InnerText ?? "Unknown";
string value = fieldNode.SelectSingleNode("value").InnerText;
//CHECK IF ARBITRARY LABEL WAS ADDED BEFORE
if (!dt.Columns.Contains(label))
{
//CREATE COLUMN FOR NEW LABEL
dt.Columns.Add(label);
}
dr[label] = value;
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
Related
I have the following XML File:
<order id="1234">
<users>
<user id="102030" nick="nickname" done="false" />
<user id="123456" nick="nickname" done="false" />
</users>
<machines>
<machine id="123" sd="123" ref="" done="false" />
<machine id="456" sd="456" ref="" done="false" />
<machine id="789" sd="789" ref="" done="false" />
</machines>
</order>
I want to delete the user with the id 102030, so the xml looks like this:
<users>
<user id="123456" nick="nickname" done="false" />
</users>
<machines>
<machine id="123" sd="123" ref="" done="false" />
<machine id="456" sd="456" ref="" done="false" />
<machine id="789" sd="789" ref="" done="false" />
</machines>
</order>
This is my code which doesn't work:
XmlDocument doc = XmlDocument.Load(path);
XmlNodeList nodes = doc.GetElementsByTagName("users");
foreach(XmlNode node in nodes){
foreach(XmlAttribute attribute in node.Attributes){
if(attribute.Name== "id" && attribute.Value == "102030"){
node.RemoveAll();
}
}
}
doc.Save(path);
I am a newbie in C# so I need every help!
Thanks in advance, geibi
XmlNode.RemoveAll() does not remove a node. Instead it:
Removes all the child nodes and/or attributes of the current node.
Thus, instead you need to remove the node from its parent:
node.ParentNode.RemoveChild(node);
I am currently working on trying to packet filter using XML C# and XPath. The aim is to draw out each unique IP source address and see what IP destinations it has been talking to.
The aim is to view, using a form, the Source and a list of the Destinations either using a list box or property grid.
public void LoadPackets()
{
var xmlDoc2 = new XmlDocument();
xmlDoc2.Load("Packets.xml");
foreach (XmlNode packet in xmlDoc2.DocumentElement)
{
var node = xmlDoc2.SelectSingleNode("pdml/packet/proto/field[#name='ip.src']/#show");
ipsrc = node.Value;
var node2 = xmlDoc2.SelectSingleNode("pdml/packet/proto/field[#name='ip.dst']/#show");
string ipdst = node2.Value;
list.Items.Add(ipsrc);
list.Items.Add(ipdst);
}
}
This currently finds an IP source and destination but repeats the same one whilst adding it to the list box. There are different IP sources and destinations that are not being added.
Each packet looks like the following in the XML:
<packet>
<proto name="geninfo" pos="0" showname="General information" size="54">
<field name="num" pos="0" show="1" showname="Number" value="1" size="54"/>
<field name="len" pos="0" show="54" showname="Frame Length" value="36" size="54"/>
<field name="caplen" pos="0" show="54" showname="Captured Length" value="36" size="54"/>
<field name="timestamp" pos="0" show="Aug 4, 2014 14:18:24.053628000 GMT Daylight Time" showname="Captured Time" value="1407158304.053628000" size="54"/>
</proto>
<proto name="frame" showname="Frame 1: 54 bytes on wire (432 bits), 54 bytes captured (432 bits) on interface 0" size="54" pos="0">
<field name="frame.interface_id" showname="Interface id: 0 (\Device\NPF_{F1D229D2-3ADA-4820-85D2-FCE7FB5D24E5})" size="0" pos="0" show="0"/>
<field name="frame.encap_type" showname="Encapsulation type: Ethernet (1)" size="0" pos="0" show="1"/>
<field name="frame.time" showname="Arrival Time: Aug 4, 2014 14:18:24.053628000 GMT Daylight Time" size="0" pos="0" show=""Aug 4, 2014 14:18:24.053628000 GMT Daylight Time""/>
<field name="frame.offset_shift" showname="Time shift for this packet: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
<field name="frame.time_epoch" showname="Epoch Time: 1407158304.053628000 seconds" size="0" pos="0" show="1407158304.053628000"/>
<field name="frame.time_delta" showname="Time delta from previous captured frame: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
<field name="frame.time_delta_displayed" showname="Time delta from previous displayed frame: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
<field name="frame.time_relative" showname="Time since reference or first frame: 0.000000000 seconds" size="0" pos="0" show="0.000000000"/>
<field name="frame.number" showname="Frame Number: 1" size="0" pos="0" show="1"/>
<field name="frame.len" showname="Frame Length: 54 bytes (432 bits)" size="0" pos="0" show="54"/>
<field name="frame.cap_len" showname="Capture Length: 54 bytes (432 bits)" size="0" pos="0" show="54"/>
<field name="frame.marked" showname="Frame is marked: False" size="0" pos="0" show="0"/>
<field name="frame.ignored" showname="Frame is ignored: False" size="0" pos="0" show="0"/>
<field name="frame.protocols" showname="Protocols in frame: eth:ethertype:ip:tcp" size="0" pos="0" show="eth:ethertype:ip:tcp"/>
</proto>
<proto name="eth" showname="Ethernet II, Src: 78:e4:00:f9:ea:83 (78:e4:00:f9:ea:83), Dst: 98:8b:5d:b9:50:70 (98:8b:5d:b9:50:70)" size="14" pos="0">
<field name="eth.dst" showname="Destination: 98:8b:5d:b9:50:70 (98:8b:5d:b9:50:70)" size="6" pos="0" show="98:8b:5d:b9:50:70" value="988b5db95070">
<field name="eth.dst_resolved" showname="Destination (resolved): 98:8b:5d:b9:50:70" hide="yes" size="6" pos="0" show="98:8b:5d:b9:50:70" value="988b5db95070"/>
<field name="eth.addr" showname="Address: 98:8b:5d:b9:50:70 (98:8b:5d:b9:50:70)" size="6" pos="0" show="98:8b:5d:b9:50:70" value="988b5db95070"/>
<field name="eth.addr_resolved" showname="Address (resolved): 98:8b:5d:b9:50:70" hide="yes" size="6" pos="0" show="98:8b:5d:b9:50:70" value="988b5db95070"/>
<field name="eth.lg" showname=".... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)" size="3" pos="0" show="0" value="0" unmaskedvalue="988b5d"/>
<field name="eth.ig" showname=".... ...0 .... .... .... .... = IG bit: Individual address (unicast)" size="3" pos="0" show="0" value="0" unmaskedvalue="988b5d"/>
</field>
<field name="eth.src" showname="Source: 78:e4:00:f9:ea:83 (78:e4:00:f9:ea:83)" size="6" pos="6" show="78:e4:00:f9:ea:83" value="78e400f9ea83">
<field name="eth.src_resolved" showname="Source (resolved): 78:e4:00:f9:ea:83" hide="yes" size="6" pos="6" show="78:e4:00:f9:ea:83" value="78e400f9ea83"/>
<field name="eth.addr" showname="Address: 78:e4:00:f9:ea:83 (78:e4:00:f9:ea:83)" size="6" pos="6" show="78:e4:00:f9:ea:83" value="78e400f9ea83"/>
<field name="eth.addr_resolved" showname="Address (resolved): 78:e4:00:f9:ea:83" hide="yes" size="6" pos="6" show="78:e4:00:f9:ea:83" value="78e400f9ea83"/>
<field name="eth.lg" showname=".... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)" size="3" pos="6" show="0" value="0" unmaskedvalue="78e400"/>
<field name="eth.ig" showname=".... ...0 .... .... .... .... = IG bit: Individual address (unicast)" size="3" pos="6" show="0" value="0" unmaskedvalue="78e400"/>
</field>
<field name="eth.type" showname="Type: IP (0x0800)" size="2" pos="12" show="2048" value="0800"/>
</proto>
<proto name="ip" showname="Internet Protocol Version 4, Src: 192.168.1.204 (192.168.1.204), Dst: 162.159.242.165 (162.159.242.165)" size="20" pos="14">
<field name="ip.version" showname="Version: 4" size="1" pos="14" show="4" value="45"/>
<field name="ip.hdr_len" showname="Header Length: 20 bytes" size="1" pos="14" show="20" value="45"/>
<field name="ip.dsfield" showname="Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))" size="1" pos="15" show="0" value="00">
<field name="ip.dsfield.dscp" showname="0000 00.. = Differentiated Services Codepoint: Default (0x00)" size="1" pos="15" show="0" value="0" unmaskedvalue="00"/>
<field name="ip.dsfield.ecn" showname=".... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)" size="1" pos="15" show="0" value="0" unmaskedvalue="00"/>
</field>
<field name="ip.len" showname="Total Length: 40" size="2" pos="16" show="40" value="0028"/>
<field name="ip.id" showname="Identification: 0x1cf1 (7409)" size="2" pos="18" show="7409" value="1cf1"/>
<field name="ip.flags" showname="Flags: 0x02 (Don't Fragment)" size="1" pos="20" show="2" value="40">
<field name="ip.flags.rb" showname="0... .... = Reserved bit: Not set" size="1" pos="20" show="0" value="40"/>
<field name="ip.flags.df" showname=".1.. .... = Don't fragment: Set" size="1" pos="20" show="1" value="40"/>
<field name="ip.flags.mf" showname="..0. .... = More fragments: Not set" size="1" pos="20" show="0" value="40"/>
</field>
<field name="ip.frag_offset" showname="Fragment offset: 0" size="2" pos="20" show="0" value="4000"/>
<field name="ip.ttl" showname="Time to live: 128" size="1" pos="22" show="128" value="80"/>
<field name="ip.proto" showname="Protocol: TCP (6)" size="1" pos="23" show="6" value="06"/>
<field name="ip.checksum" showname="Header checksum: 0x8625 [validation disabled]" size="2" pos="24" show="34341" value="8625">
<field name="ip.checksum_good" showname="Good: False" size="2" pos="24" show="0" value="8625"/>
<field name="ip.checksum_bad" showname="Bad: False" size="2" pos="24" show="0" value="8625"/>
</field>
<field name="ip.src" showname="Source: 192.168.1.204 (192.168.1.204)" size="4" pos="26" show="192.168.1.204" value="c0a801cc"/>
<field name="ip.addr" showname="Source or Destination Address: 192.168.1.204 (192.168.1.204)" hide="yes" size="4" pos="26" show="192.168.1.204" value="c0a801cc"/>
<field name="ip.src_host" showname="Source Host: 192.168.1.204" hide="yes" size="4" pos="26" show="192.168.1.204" value="c0a801cc"/>
<field name="ip.host" showname="Source or Destination Host: 192.168.1.204" hide="yes" size="4" pos="26" show="192.168.1.204" value="c0a801cc"/>
<field name="ip.dst" showname="Destination: 162.159.242.165 (162.159.242.165)" size="4" pos="30" show="162.159.242.165" value="a29ff2a5"/>
<field name="ip.addr" showname="Source or Destination Address: 162.159.242.165 (162.159.242.165)" hide="yes" size="4" pos="30" show="162.159.242.165" value="a29ff2a5"/>
<field name="ip.dst_host" showname="Destination Host: 162.159.242.165" hide="yes" size="4" pos="30" show="162.159.242.165" value="a29ff2a5"/>
<field name="ip.host" showname="Source or Destination Host: 162.159.242.165" hide="yes" size="4" pos="30" show="162.159.242.165" value="a29ff2a5"/>
<field name="" show="Source GeoIP: Unknown" size="4" pos="26" value="c0a801cc"/>
<field name="" show="Destination GeoIP: Unknown" size="4" pos="30" value="a29ff2a5"/>
</proto>
<proto name="tcp" showname="Transmission Control Protocol, Src Port: 6287 (6287), Dst Port: 443 (443), Seq: 1, Ack: 1, Len: 0" size="20" pos="34">
<field name="tcp.srcport" showname="Source Port: 6287 (6287)" size="2" pos="34" show="6287" value="188f"/>
<field name="tcp.dstport" showname="Destination Port: 443 (443)" size="2" pos="36" show="443" value="01bb"/>
<field name="tcp.port" showname="Source or Destination Port: 6287" hide="yes" size="2" pos="34" show="6287" value="188f"/>
<field name="tcp.port" showname="Source or Destination Port: 443" hide="yes" size="2" pos="36" show="443" value="01bb"/>
<field name="tcp.stream" showname="Stream index: 0" size="0" pos="34" show="0"/>
<field name="tcp.len" showname="TCP Segment Len: 0" size="1" pos="46" show="0" value="50"/>
<field name="tcp.seq" showname="Sequence number: 1 (relative sequence number)" size="4" pos="38" show="1" value="b99b3a34"/>
<field name="tcp.ack" showname="Acknowledgment number: 1 (relative ack number)" size="4" pos="42" show="1" value="bd9a09d0"/>
<field name="tcp.hdr_len" showname="Header Length: 20 bytes" size="1" pos="46" show="20" value="50"/>
<field name="tcp.flags" showname=".... 0000 0001 0000 = Flags: 0x010 (ACK)" size="2" pos="46" show="16" value="10" unmaskedvalue="5010">
<field name="tcp.flags.res" showname="000. .... .... = Reserved: Not set" size="1" pos="46" show="0" value="0" unmaskedvalue="50"/>
<field name="tcp.flags.ns" showname="...0 .... .... = Nonce: Not set" size="1" pos="46" show="0" value="0" unmaskedvalue="50"/>
<field name="tcp.flags.cwr" showname=".... 0... .... = Congestion Window Reduced (CWR): Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
<field name="tcp.flags.ecn" showname=".... .0.. .... = ECN-Echo: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
<field name="tcp.flags.urg" showname=".... ..0. .... = Urgent: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
<field name="tcp.flags.ack" showname=".... ...1 .... = Acknowledgment: Set" size="1" pos="47" show="1" value="1" unmaskedvalue="10"/>
<field name="tcp.flags.push" showname=".... .... 0... = Push: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
<field name="tcp.flags.reset" showname=".... .... .0.. = Reset: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
<field name="tcp.flags.syn" showname=".... .... ..0. = Syn: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
<field name="tcp.flags.fin" showname=".... .... ...0 = Fin: Not set" size="1" pos="47" show="0" value="0" unmaskedvalue="10"/>
</field>
<field name="tcp.window_size_value" showname="Window size value: 67" size="2" pos="48" show="67" value="0043"/>
<field name="tcp.window_size" showname="Calculated window size: 67" size="2" pos="48" show="67" value="0043"/>
<field name="tcp.window_size_scalefactor" showname="Window size scaling factor: -1 (unknown)" size="2" pos="48" show="-1" value="0043"/>
<field name="tcp.checksum" showname="Checksum: 0x8253 [validation disabled]" size="2" pos="50" show="33363" value="8253">
<field name="tcp.checksum_good" showname="Good Checksum: False" size="2" pos="50" show="0" value="8253"/>
<field name="tcp.checksum_bad" showname="Bad Checksum: False" size="2" pos="50" show="0" value="8253"/>
</field>
<field name="tcp.urgent_pointer" showname="Urgent pointer: 0" size="2" pos="52" show="0" value="0000"/>
</proto>
</packet>
I know it's very long but that is the format it comes in. What would be the best way to make the IP source a unique identifier, whilst adding the IP destinations to a list. It needs to be able to do this for every packet in the file.
Thanks, Tom.
i think #name of the <field> is unique across all the packets so that i apply following xpath
XmlNode node = xmlDoc2.DocumentElement;
var results = node.SelectNodes("//field[#name='ip.src']");
foreach (XmlNode result in results)
{
Console.WriteLine(result.Attributes["show"].Value);
}
--SJ
I have a XML that has a structure similar to this one:
<?xml version="1.0" encoding="UTF-8"?>
<CompanyName>
<AttrContainer>
<Attr type="String">
<Name value="'Name'" />
<Value value="'AttrContainer'" />
</Attr>
<SubContainer>
<AttrContainer value="'WSSMetadata'" />
<AttrContainer>
<Attr type="String">
<Name value="'Name'" />
<Value value="'AttrContainer'" />
</Attr>
<SubContainer>
<WSSMetadata value="'afe2e194-0ce7-4bfc-b446-9623e4fe7189'" />
<AttrContainer>
<Attr type="String">
<Name value="'Name'" />
<Value value="'WSSMetadata'" />
</Attr>
<Attr type="Uuid">
<Name value="'scanID'" />
<Value value="afe2e194-0ce7-4bfc-b446-9623e4fe7189" />
</Attr>
<Attr type="String">
<Name value="'imagePath'" />
</Attr>
<Attr type="String">
<Name value="'imagePathHD'" />
</Attr>
<Attr type="String">
<Name value="'imagePathThumbnail'" />
</Attr>
<Attr type="String">
<Name value="'imagePathGrey'" />
<Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey.jpg'" />
</Attr>
<Attr type="String">
<Name value="'imagePathGreyHD'" />
<Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_hd.jpg'" />
</Attr>
<Attr type="String">
<Name value="'imagePathGreyThumbnail'" />
<Value value="'Images/afe2e194-0ce7-4bfc-b446-9623e4fe7189_grey_thumbnail.jpg'" />
</Attr>
</AttrContainer>
</SubContainer>
</AttrContainer>
</SubContainer>
</AttrContainer>
</CompanyName>
and I am trying to parse it using this code (Linq to XML)
var xmlContent = File.ReadAllText(filePathName);
var doc = XDocument.Parse(xmlContent);
var attr = doc.Root.Elements("CompanyName");
var x = attr.ToList();
but it x has no element.
My questions:
What is wrong with this code that I am not able to get the CompanyName element?
How can I get list of all <SubContainer> elements?
When I got the list of <SubContainer> elements, how can I read read and change its content?
I think you want this instead:
var attr = doc.Root.Elements("AttrContainer");
.Elements returns child elements of that name. CompanyName is you root node, and you're trying to search for its children which are AttrContainer.
What is wrong with this code that I am not able to get the companyname element?
The root element of your xml is CompanyName. So what your code is doing, it's essentially asking 'give me all CompanyName elements that are children of my root CompanyName element'. Hence the list is empty.
how can I get list of all SubContainer elements.
You can use
var subContainers = doc.Root.Descendants("SubContainer");
when I got the list of SubContainer elements, how can I read read and change its content?
foreach (var subContainer in subContainers)
{
foreach (var attrContainer in subContainer.Elements("AttrContainer"))
{
var attr = attrContainer.Elements("Attr").FirstOrDefault();
if (attr != null)
{
var oldValue = attr.Attribute("type").Value;
attr.Attribute("type").Value = "something completely different";
}
}
}
This reads and changes the type on each first Attr element (assuming one exists) in all AttrContainers in all SubContainers - hopefully you can derive something meaningful out of that.
doc.Root returns the element <CompanyName>, so further selecting elements named CompanyName won't return any elements. You're effectively trying to select all <CompanyName> elements that are children of <CompanyName>.
This code will select all <SubContainer> elements no matter their depth. I'm suggesting this because your example XML has several <SubContainer> elements.
// Read all Attr elements
IEnumerable<XElement> subContainerElements = doc.Root.Descendants("SubContainer");
foreach (XElement subContainerElement in subContainerElements)
{
// Work with <SubContainer> element here
}
I have following XML File:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3RecordDocument>
<header type="array">
<charset>utf-8</charset>
<XMLversion>1.0</XMLversion>
<meta type="array">
<title></title>
<description></description>
<notes></notes>
<packager_username>xxxadmin</packager_username>
<packager_name>Firstname</packager_name>
<packager_email>name#domain.com</packager_email>
<TYPO3_version>4.5.26</TYPO3_version>
<created>Thursday 27. June 2013</created>
</meta>
<static_tables index="relStaticTables" type="array">
</static_tables>
<excludeMap type="array">
</excludeMap>
<softrefCfg type="array">
</softrefCfg>
<extensionDependencies type="array">
</extensionDependencies>
<records type="array">
<table index="tx_nfcacedata_lawyer" type="array">
<rec index="678" type="array">
<uid>678</uid>
<pid>233</pid>
<title>Partner & Partner, City</title>
<size>536</size>
<relations index="rels" type="array">
<element index="tx_nfcacedata_county:137" type="array">
<id>137</id>
<table>tx_nfcacedata_county</table>
</element>
</relations>
<softrefs type="array">
</softrefs>
</rec>
<rec index="679" type="array">
<uid>679</uid>
<pid>233</pid>
<title>Name2, City2</title>
<size>530</size>
<relations index="rels" type="array">
<element index="tx_nfcacedata_county:137" type="array">
<id>137</id>
<table>tx_nfcacedata_county</table>
</element>
</relations>
<softrefs type="array">
</softrefs>
</rec>
</table>
</records>
<pid_lookup type="array">
<page_contents index="233" type="array">
<table index="tx_nfcacedata_lawyer" type="array">
<item index="678">1</item>
<item index="679">1</item>
</table>
</page_contents>
</pid_lookup>
</header>
<records type="array">
<tablerow index="tx_nfcacedata_lawyer:678" type="array">
<fieldlist index="data" type="array">
<field index="uid">678</field>
<field index="pid">233</field>
<field index="tstamp">1321450985</field>
<field index="crdate">1250858888</field>
<field index="cruser_id">2</field>
<field index="deleted">0</field>
<field index="name">Partner & Partner</field>
<field index="street">Street 49</field>
<field index="zip">137</field>
<field index="phone">0123 123456</field>
<field index="fax">0123 1234560</field>
<field index="web">www.domain.de</field>
<field index="mail">info#domain.de</field>
<field index="mobile"></field>
<field index="zip_internal">12345</field>
<field index="city_internal">City</field>
<field index="latitude">10.0347062</field>
<field index="longitude">20.7524338</field>
</fieldlist>
<related index="rels" type="array">
<field index="zip" type="array">
<type>db</type>
<relations index="itemArray" type="array">
<element index="0" type="array">
<id>137</id>
<table>tx_nfcacedata_county</table>
</element>
</relations>
</field>
</related>
</tablerow>
<tablerow index="tx_nfcacedata_lawyer:679" type="array">
<fieldlist index="data" type="array">
<field index="uid">679</field>
<field index="pid">233</field>
<field index="tstamp">1257856437</field>
<field index="crdate">1250858888</field>
<field index="cruser_id">2</field>
<field index="deleted">0</field>
<field index="name">Name2</field>
<field index="street">Street 5</field>
<field index="zip">137</field>
<field index="phone">0234 12345678</field>
<field index="fax">0234 123456780</field>
<field index="web">www.domain2.de</field>
<field index="mail">info#domain2.de</field>
<field index="mobile"></field>
<field index="zip_internal">12345</field>
<field index="city_internal">City2</field>
<field index="latitude">10.0523024</field>
<field index="longitude">20.8061242</field>
</fieldlist>
<related index="rels" type="array">
<field index="zip" type="array">
<type>db</type>
<relations index="itemArray" type="array">
<element index="0" type="array">
<id>137</id>
<table>tx_nfcacedata_county</table>
</element>
</relations>
</field>
</related>
</tablerow>
</records>
</T3RecordDocument>
And I am currently parsing it with following code:
XDocument xdoc = XDocument.Parse(XML);
foreach (var descendant in xdoc.Descendants("records").Descendants("tablerow").Descendants("fieldlist"))
{
Lawyer tempLawyer = new Lawyer();
foreach (var item in descendant.Elements())
{
switch (item.Attributes().First().Value)
{
case "name":
tempLawyer.name = item.Value;
break;
case "street":
tempLawyer.street = item.Value;
break;
case "zip_internal":
tempLawyer.zip = item.Value;
break;
case "city_internal":
tempLawyer.city = item.Value;
break;
case "phone":
tempLawyer.phone = item.Value;
break;
case "fax":
tempLawyer.fax = item.Value;
break;
case "web":
tempLawyer.web = item.Value;
break;
case "latitude":
tempLawyer.lat = item.Value;
break;
case "longitude":
tempLawyer.lng = item.Value;
break;
}
}
list_Lawyer.Add(tempLawyer);
}
It's working, but maybe there is a more simpler and faster way to achieve what I want.
Maybe something like this:
var tempList = from element in
xdoc.Descendants("records").Descendants("tablerow").Descendants("fieldlist").Elements()
select new
{
name = (string)element.Attribute("name").Value,
street = (string)element.Attribute("street").Value,
zip = (string)element.Attribute("zip_internal").Value,
city = (string)element.Attribute("city_internal").Value,
phone = (string)element.Attribute("phone").Value,
fax = (string)element.Attribute("fax").Value,
web = (string)element.Attribute("web").Value,
lat = (string)element.Attribute("latitude").Value,
lng = (string)element.Attribute("longitude").Value,
};
This code isn't working because the element's attribute is index="XXXXXX" and not XXXXXX, maybe someone can lead me into the right direction.
from element in xdoc.Descendants("fieldlist")
select new {
Name = element.Elements("field")
.Single(e => e.Attribute("index").Value == "name")
.Value,
...
I am converting XML data to dataset with following code:
Public Function ReadXML(ByVal xmlData As String) As DataSet
Dim stream As StringReader = Nothing
Dim reader As XmlTextReader = Nothing
Try
Dim xmlDS As New DataSet()
stream = New StringReader(xmlData)
' Load the XmlTextReader from the stream
reader = New XmlTextReader(stream)
xmlDS.ReadXml(reader)
Return xmlDS
Catch
Return Nothing
Finally
If reader IsNot Nothing Then
reader.Close()
End If
End Try
End Function
xmlData is parameter to function which gives path to xml file.
when the code is on line:
xmlDS.ReadXml(reader) it throws me error:
XMLException was caught: Data at the root level is invalid. Line 1, position 1.
I am not able to understand why is this happening.
Please help me, Answer in c# can also help me.
C# equivalent function for this:
public DataSet ConvertXMLToDataSet(string xmlData)
{
StringReader stream = null;
XmlTextReader reader = null;
try
{
DataSet xmlDS = new DataSet() ;
stream = new StringReader(xmlData);
// Load the XmlTextReader from the stream
reader = new XmlTextReader(stream);
xmlDS.ReadXml(reader);
return xmlDS;
}
catch
{
return null;
}
finally
{
if(reader != null) reader.Close();
}
}// Use this function to get XML string from a dataset
Please help me.
XML:
<?xml version="1.0" encoding="UTF-8"?>
-<movieinfo creationdate="8/30/2013 11:32:21 AM"> -<localizedtemplatetexts> <field label="Movie Details" id="ttMovieDetails"/> <field label="Cast" id="ttCast"/> <field label="Crew" id="ttCrew"/> <field label="Disc" id="ttDisc"/> <field label="Edition Details" id="ttProductDetails"/> <field label="Personal Details" id="ttPersonalDetails"/> <field label="Episodes" id="ttEpisodeDetails"/> <field label="Images" id="ttImageLinkDetails"/> <field label="Images" id="ttMCEToggleImages"/> <field label="List" id="ttMCEToggleList"/> <field label="First" id="ttFirst"/> <field label="Previous" id="ttPrev"/> <field label="Up" id="ttUp"/> <field label="Next" id="ttNext"/> <field label="Last" id="ttLast"/> <field label="Buy this movie online" id="ttBuyOnline"/> </localizedtemplatetexts> -<moviemetadata> <field label="Index" id="dfIndex" name="Index"/> <field label="Loaned To" id="dfLoaner" name="Loaned To"/> <field label="Loan Date" id="dfLoanDate" name="Loan Date"/> <field label="Due Date" id="dfDueDate" name="Due Date"/> <field label="Overdue" id="dfIsOverdue" name="Overdue"/> <field label="Return Date" id="dfReturnDate" name="Return Date"/> <field label="Loan Notes" id="dfLoanNotes" name="Loan Notes"/> <field label="Loaner Email" id="dfLoanEmail" name="Loaner Email"/> <field label="Loaner Address" id="dfLoanAddress" name="Loaner Address"/> <field label="Title" id="dfLoanTitle" name="Title"/> <field label="Title" id="dfTitle" name="Title"/> <field label="Title Sort" id="dfTitleSort" name="Title Sort"/> <field label="Title Extension" id="dfTitleExtension" name="Title Extension"/> <field label="Collection Status" id="dfCollectionStatus" name="Collection Status"/> <field label="Plot" id="dfPlot" name="Plot"/> <field label="Running Time" id="dfRunTime" name="Running Time"/> <field label="No. of Disks/Tapes" id="dfNrItems" name="No. of Disks/Tapes"/> <field label="Barcode" id="dfUPC" name="Barcode"/> <field label="Movie Release Date" id="dfReleaseDate" name="Movie Release Date"/> <field label="Release Date" id="dfDVDReleaseDate" name="Release Date"/> <field label="IMDb Number" id="dfIMDBNumber" name="IMDb Number"/> <field label="IMDb Rating" id="dfIMDBRating" name="IMDb Rating"/> <field label="TMDb ID" id="dfMovieDbID" name="TMDb ID"/> <field label="Color" id="dfColor" name="Color"/> <field label="Layers" id="dfLayers" name="Layers"/> <field label="Front Cover" id="dfCoverFront" name="Front Cover"/> <field label="Back Cover" id="dfCoverBack" name="Back Cover"/> <field label="Movie Poster" id="dfMoviePoster" name="Movie Poster"/> <field label="Backdrop" id="dfBackDrop" name="Backdrop"/> <field label="My Rating" id="dfMyRating" name="My Rating"/> <field label="Seen It" id="dfSeenIt" name="Seen It"/> <field label="Viewing Date" id="dfSeenWhen" name="Viewing Date"/> <field label="Viewing Year" id="dfSeenYear" name="Viewing Year"/> <field label="Seen Where" id="dfSeenWhere" name="Seen Where"/> <field label="Purchase Date" id="dfPurchaseDate" name="Purchase Date"/> <field label="Purchase Year" id="dfPurchaseYear" name="Purchase Year"/> <field label="Purchase Price" id="dfPurchasePrice" name="Purchase Price"/> <field label="Location" id="dfLocation" name="Location"/> <field label="Starting Position" id="dfStartPos" name="Starting Position"/> <field label="Tape Speed" id="dfTapeSpeed" name="Tape Speed"/> <field label="Notes" id="dfNotes" name="Notes"/> <field label="Links" id="dfLinks" name="Links"/> <field label="Movie Files" id="dfMovieLinks" name="Movie Files"/> <field label="Image Files" id="dfImageLinks" name="Image Files"/> <field label="Other Files" id="dfOtherLinks" name="Other Files"/> <field label="Trailer URLs" id="dfLinkTrailers" name="Trailer URLs"/> <field label="Trailer Files" id="dfTrailerFiles" name="Trailer Files"/> <field label="Quantity" id="dfQuantity" name="Quantity"/> <field label="Current Value" id="dfCurrentValue" name="Current Value"/> <field label="Storage Device" id="dfStorageDevice" name="Storage Device"/> <field label="Slot" id="dfStorageSlot" name="Slot"/> <field label="Episodes" id="dfEpisodes" name="Episodes"/> <field label="Chapters" id="dfChapters" name="Chapters"/> <field label="Extra Features" id="dfExtraFeatures" name="Extra Features"/> <field label="Actor" id="dfActor" name="Actor"/> <field label="Genre" id="dfGenre" name="Genre"/> <field label="Director" id="dfDirector" name="Director"/> <field label="Edition" id="dfEdition" name="Edition"/> <field label="Movie Release Year" id="dfReleaseYear" name="Movie Release Year"/> <field label="Format" id="dfFormat" name="Format"/> <field label="Region" id="dfRegion" name="Region"/> <field label="Release Year" id="dfDVDReleaseYear" name="Release Year"/> <field label="Series" id="dfSeries" name="Series"/> <field label="Box set" id="dfBoxSet" name="Box set"/> <field label="Audience Rating" id="dfMPAARating" name="Audience Rating"/> <field label="Studio" id="dfStudio" name="Studio"/> <field label="Distributor" id="dfDistributor" name="Distributor"/> <field label="Extras" id="dfExtras" name="Extras"/> <field label="Country" id="dfCountry" name="Country"/> <field label="Language" id="dfLanguage" name="Language"/> <field label="Plot Language" id="dfPlotLanguage" name="Plot Language"/> <field label="Original Title" id="dfOriginalTitle" name="Original Title"/> <field label="Screen Ratio" id="dfRatio" name="Screen Ratio"/> <field label="Packaging" id="dfPackage" name="Packaging"/> <field label="Subtitles" id="dfSubtitles" name="Subtitles"/> <field label="Audio Tracks" id="dfAudio" name="Audio Tracks"/> <field label="Store" id="dfStore" name="Store"/> <field label="Owner" id="dfOwner" name="Owner"/> <field label="Tape Label" id="dfTapeLabel" name="Tape Label"/> <field label="Condition" id="dfCondition" name="Condition"/> <field label="Tags" id="dfTag" name="Tags"/> <field label="Producer" id="dfProducer" name="Producer"/> <field label="Writer" id="dfWriter" name="Writer"/> <field label="Cinematography" id="dfCamera" name="Cinematography"/> <field label="Musician" id="dfMusic" name="Musician"/> <field label="User Credit 1" id="dfUserCredit1" name="User Credit 1"/> <field label="User Credit 2" id="dfUserCredit2" name="User Credit 2"/> <field label="Features" id="dfFeatures" name="Features"/> <field label="Title" id="dfEpisodeTitle" name="Title"/> <field label="Disc No." id="dfEpisodeDiscNr" name="Disc No."/> <field label="Plot" id="dfEpisodePlot" name="Plot"/> <field label="Running Time" id="dfEpisodeRunTime" name="Running Time"/> <field label="First Air Date" id="dfEpisodeFirstAirDate" name="First Air Date"/> <field label="Sequence No" id="dfEpisodeSequenceNr" name="Sequence No"/> <field label="Movie Link" id="dfEpisodeMovieLink" name="Movie Link"/> <field label="Internet Link" id="dfEpisodeLink" name="Internet Link"/> <field label="Image Link" id="dfEpisodeImageLink" name="Image Link"/> <field label="IMDB Number" id="dfEpisodeIMDBNumber" name="IMDB Number"/> <field label="Seen It" id="dfEpisodeSeenIt" name="Seen It"/> <field label="Viewing Date" id="dfEpisodeSeenWhen" name="Viewing Date"/> <field label="Seen Where" id="dfEpisodeSeenWhere" name="Seen Where"/> <field label="Disc No." id="strDiscNr" name="Disc No."/> <field label="Number Of Episodes" id="strNrEpisodes" name="Number Of Episodes"/> <field label="User Lookup 1" id="dfUserLookup1" name="User Lookup 1"/> <field label="User Lookup 2" id="dfUserLookup2" name="User Lookup 2"/> <field label="User Text 1" id="dfUserText1" name="User Text 1"/> <field label="User Text 2" id="dfUserText2" name="User Text 2"/> <field label="In Collection (0/1)" id="dfInCollectionBit" name="In Collection (0/1)"/> <field label="ID" id="dfID" name="ID"/> <field label="Last Modified" id="dfLastModified" name="Last Modified"/> <field label="Thumbnail" id="dfThumbFilePath" name="Thumbnail"/> <field label="Last Submission Date" id="dfSubmissionDate" name="Last Submission Date"/> <field label="Clz Movie ID" id="dfBPMovieID" name="Clz Movie ID"/> <field label="Clz Media ID" id="dfBPMediaID" name="Clz Media ID"/> <field label="BPOnline Movie Last Received Revision" id="dfBPMovieLastReceivedRevision" name="BPOnline Movie Last Received Revision"/> <field label="BPOnline Media Last Received Revision" id="dfBPMediaLastReceivedRevision" name="BPOnline Media Last Received Revision"/> <field label="Title First Letter" id="dfDynTitleLetter" name="Title First Letter"/> <field label="My Rating" id="dfDynRating" name="My Rating"/> </moviemetadata> -<movielist> -<movie> <id>701</id> <index>11</index> <coverfront>C:\Users\Administrator\Documents\Movie Collector\Images\Brave2012701_f.jpg</coverfront> <poster>C:\Users\Administrator\Documents\Movie Collector\Images\Brave2012701_p.jpg</poster> <backdropurl>C:\Users\Administrator\Documents\Movie Collector\Images\Brave2012701_d.jpg</backdropurl> <backgroundbackdrop>CLZBACKDROP</backgroundbackdrop> <imdburl>http://www.imdb.com/title/tt1217209</imdburl> <imdbnum>1217209</imdbnum> <imdbrating>7.3</imdbrating> <imdbvotes>66509</imdbvotes> <tmdbid>62177</tmdbid> <tmdburl>http://themoviedb.org/movie/62177</tmdburl> -<format> <displayname>Blu-ray Disc</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\bluray.jpg</templateimage> <scaledimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\bluray16x16.bmp</scaledimage> <sortname>Blu-ray Disc</sortname> </format> -<country> <displayname>USA</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\usa.jpg</templateimage> <scaledimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\usa16.jpg</scaledimage> <sortname>USA</sortname> </country> <collectionstatus listid="3">In Collection</collectionstatus> -<language> <displayname>English</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\uk.jpg</templateimage> <scaledimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\uk16.jpg</scaledimage> <sortname>English</sortname> </language> -<store> <displayname>Amazon</displayname> <sortname>Amazon</sortname> </store> <purchaseprice>$20.00</purchaseprice> <series/> <boxset/> -<purchasedate> -<year> <displayname>2012</displayname> </year> <month>12</month> <day>10</day> <date>12/10/2012</date> </purchasedate> -<owner> <displayname>John Doe</displayname> <sortname>John Doe</sortname> </owner> <title>Brave</title> <plot>Brave is set in the mystical Scottish Highlands, where Mérida is the princess of a kingdom ruled by King Fergus and Queen Elinor. An unruly daughter and an accomplished archer, Mérida one day defies a sacred custom of the land and inadvertently brings turmoil to the kingdom. In an attempt to set things right, Mérida seeks out an eccentric old Wise Woman and is granted an ill-fated wish. Also figuring into Mérida’s quest — and serving as comic relief — are the kingdom’s three lords: the enormous Lord MacGuffin, the surly Lord Macintosh, and the disagreeable Lord Dingwall.</plot> <myrating>9</myrating> -<myrating> <displayname>9</displayname> <sortname>9</sortname> </myrating> <seenit boolvalue="1">Yes</seenit> -<viewingdate> -<year> <displayname>2012</displayname> </year> <month>12</month> <day>10</day> <date>12/10/2012</date> </viewingdate> -<edition> <displayname>Collector's Edition</displayname> <sortname>Collector's Edition</sortname> </edition> -<condition> <displayname>Excellent</displayname> <sortname>090 Excellent</sortname> <lastname>090 Excellent</lastname> </condition> -<releasedate> -<year> <displayname>2012</displayname> </year> <date>2012</date> </releasedate> -<dvdreleasedate> -<year> <displayname>2012</displayname> </year> <month>11</month> <day>13</day> <date>11/13/2012</date> </dvdreleasedate> -<mpaarating> <displayname>PG (Parental Guidance)</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\pg.jpg</templateimage> <scaledimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\pg-16x16.jpg</scaledimage> <sortname>PG (Parental Guidance)</sortname> </mpaarating> <seenwhere>Home</seenwhere> <upc>786936828344</upc> <package/> -<location> <displayname>Moviebox 34</displayname> <sortname>Moviebox 34</sortname> </location> <tapelabel/> <runtime>93</runtime> <runtimeminutes>93 mins</runtimeminutes> <layersnum>1</layersnum> <layers listid="1">Single Side, Dual Layer</layers> <chapters>0</chapters> <nritems>5</nritems> <quantity>1</quantity> <color listid="0">Color</color> <tapespeed listid="0">N/A</tapespeed> -<genres> -<genre> <displayname>Action</displayname> <sortname>Action</sortname> </genre> -<genre> <displayname>Adventure</displayname> <sortname>Adventure</sortname> </genre> -<genre> <displayname>Animation</displayname> <sortname>Animation</sortname> </genre> -<genre> <displayname>Comedy</displayname> <sortname>Comedy</sortname> </genre> -<genre> <displayname>Family</displayname> <sortname>Family</sortname> </genre> </genres> -<cast> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Kelly MacDonald</displayname> <sortname>MacDonald, Kelly</sortname> <lastname>MacDonald</lastname> <url>http://www.imdb.com/name/nm0531808/</url> <firstname>Kelly</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/09/09_24708_4_KellyMacDonald.jpg</imageurl> </person> <character>Merida</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Billy Connolly</displayname> <sortname>Connolly, Billy</sortname> <lastname>Connolly</lastname> <url>http://www.imdb.com/name/nm0175262/</url> <firstname>Billy</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/b4/b4_3429_4_BillyConnolly.jpg</imageurl> </person> <character>Fergus</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Emma Thompson</displayname> <sortname>Thompson, Emma</sortname> <lastname>Thompson</lastname> <url>http://www.imdb.com/name/nm0000668/</url> <firstname>Emma</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/13/13_8549_4_EmmaThompson.jpg</imageurl> </person> <character>Elinor</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Julie Walters</displayname> <sortname>Walters, Julie</sortname> <lastname>Walters</lastname> <url>http://www.imdb.com/name/nm0910278/</url> <firstname>Julie</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/20/20_14643_4_JulieWalters.jpg</imageurl> </person> <character>The Witch</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Robbie Coltrane</displayname> <sortname>Coltrane, Robbie</sortname> <lastname>Coltrane</lastname> <url>http://www.imdb.com/name/nm0001059/</url> <firstname>Robbie</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/d0/d0_92_4_RobbieColtrane.jpg</imageurl> </person> <character>Lord Dingwall</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Kevin McKidd</displayname> <sortname>McKidd, Kevin</sortname> <lastname>McKidd</lastname> <url>http://www.imdb.com/name/nm0571727/</url> <firstname>Kevin</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/b8/b8_3557_4_KevinMcKidd.jpg</imageurl> </person> <character>Lord MacGuffin/Young MacGuffin</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Craig Ferguson</displayname> <sortname>Ferguson, Craig</sortname> <lastname>Ferguson</lastname> <url>http://www.imdb.com/name/nm0272401/</url> <firstname>Craig</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/17/17_17423_4_CraigFerguson.jpg</imageurl> </person> <character>Lord Macintosh</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Sally Kinghorn</displayname> <sortname>Kinghorn, Sally</sortname> <lastname>Kinghorn</lastname> <firstname>Sally</firstname> </person> <character>Maudie</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Eilidh Fraser</displayname> <sortname>Fraser, Eilidh</sortname> <lastname>Fraser</lastname> <firstname>Eilidh</firstname> </person> <character>Maudie</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Peigi Barker</displayname> <sortname>Barker, Peigi</sortname> <lastname>Barker</lastname> <firstname>Peigi</firstname> </person> <character>Young Merida</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Steven Cree</displayname> <sortname>Cree, Steven</sortname> <lastname>Cree</lastname> <firstname>Steven</firstname> </person> <character>Young Macintosh</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Steve Purcell</displayname> <sortname>Purcell, Steve</sortname> <lastname>Purcell</lastname> <firstname>Steve</firstname> </person> <character>The Crow</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Callum O'Neill</displayname> <sortname>O'Neill, Callum</sortname> <lastname>O'Neill</lastname> <firstname>Callum</firstname> </person> <character>Wee Dingwall</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>Patrick Doyle</displayname> <sortname>Doyle, Patrick</sortname> <lastname>Doyle</lastname> <firstname>Patrick</firstname> </person> <character>Martin</character> </star> -<star> <role id="dfActor">Actor</role> <roleid>dfActor</roleid> -<person> <displayname>John Ratzenberger</displayname> <sortname>Ratzenberger, John</sortname> <lastname>Ratzenberger</lastname> <url>http://www.imdb.com/name/nm0001652/</url> <firstname>John</firstname> <imageurl>http://clzimages.com/movie/banners/actors/small/d2/d2_14840_4_JohnRatzenberger.jpg</imageurl> </person> <character>Gordon</character> </star> </cast> -<crew> -<crewmember> <role id="dfDirector">Director</role> <roleid>dfDirector</roleid> -<person> <displayname>Steve Purcell</displayname> <sortname>Purcell, Steve</sortname> <lastname>Purcell</lastname> <url>http://www.imdb.com/name/nm0700760/</url> <firstname>Steve</firstname> <imageurl>http://clzimages.com/movie/banners/employees/small/0e/0e_3199_4_StevePurcell.jpg</imageurl> </person> </crewmember> -<crewmember> <role id="dfDirector">Director</role> <roleid>dfDirector</roleid> -<person> <displayname>Brenda Chapman</displayname> <sortname>Chapman, Brenda</sortname> <lastname>Chapman</lastname> <url>http://www.imdb.com/name/nm0152312/</url> <firstname>Brenda</firstname> <imageurl>http://clzimages.com/movie/banners/employees/small/32/32_6810_4_BrendaChapman.jpg</imageurl> </person> </crewmember> -<crewmember> <role id="dfWriter">Writer</role> <roleid>dfWriter</roleid> -<person> <displayname>Steve Purcell</displayname> <sortname>Purcell, Steve</sortname> <lastname>Purcell</lastname> <firstname>Steve</firstname> </person> </crewmember> -<crewmember> <role id="dfWriter">Writer</role> <roleid>dfWriter</roleid> -<person> <displayname>Brenda Chapman</displayname> <sortname>Chapman, Brenda</sortname> <lastname>Chapman</lastname> <firstname>Brenda</firstname> </person> </crewmember> -<crewmember> <role id="dfProducer">Producer</role> <roleid>dfProducer</roleid> -<person> <displayname>Andrew Stanton</displayname> <sortname>Stanton, Andrew</sortname> <lastname>Stanton</lastname> <firstname>Andrew</firstname> </person> </crewmember> -<crewmember> <role id="dfProducer">Producer</role> <roleid>dfProducer</roleid> -<person> <displayname>John Lasseter</displayname> <sortname>Lasseter, John</sortname> <lastname>Lasseter</lastname> <firstname>John</firstname> </person> </crewmember> -<crewmember> <role id="dfMusic">Musician</role> <roleid>dfMusic</roleid> -<person> <displayname>Patrick Doyle</displayname> <sortname>Doyle, Patrick</sortname> <lastname>Doyle</lastname> <firstname>Patrick</firstname> </person> </crewmember> </crew> -<regions> -<region> <displayname>Region 1</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\r-1.jpg</templateimage> <scaledimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\r-1-16x16.jpg</scaledimage> <sortname>Region 1</sortname> </region> -<region> <displayname>Region A</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\r-A.jpg</templateimage> <scaledimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\r-A-16x16.jpg</scaledimage> <sortname>Region A</sortname> </region> </regions> -<ratios> -<ratio> <displayname>Theatrical Widescreen (2.35:1)</displayname> <sortname>Theatrical Widescreen (2.35:1)</sortname> </ratio> </ratios> -<subtitles> -<subtitle> <displayname>English (Closed Captioned)</displayname> <sortname>English (Closed Captioned)</sortname> </subtitle> -<subtitle> <displayname>French</displayname> <sortname>French</sortname> </subtitle> -<subtitle> <displayname>Spanish</displayname> <sortname>Spanish</sortname> </subtitle> </subtitles> <features/> -<audios> -<audio> <displayname>Dolby Digital 5.1 [Spanish]</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\dolbydigital-51.png</templateimage> <sortname>Dolby Digital 5.1 [Spanish]</sortname> </audio> -<audio> <displayname>DTS [English]</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\dts.png</templateimage> <sortname>DTS [English]</sortname> </audio> -<audio> <displayname>DTS [French]</displayname> <templateimage>C:\Users\Administrator\Documents\Movie Collector\Images\Listitemimages\dts.png</templateimage> <sortname>DTS [French]</sortname> </audio> </audios> -<studios> -<studio> <displayname>Pixar</displayname> <sortname>Pixar</sortname> </studio> </studios> -<distributor> <displayname>Buena Vista</displayname> <sortname>Buena Vista</sortname> </distributor> <extras/> <tags/> <userlookup1/> <userlookup2/> -<links> -<link> <description>Amazon.com</description> <url>http://www.amazon.com/gp/search?keywords=786936828344+Brave&tag=collectorzapp-20&index=dvd</url> <urltype>URL</urltype> </link> -<link> <description>Movie Collector Connect</description> <url>http://connect.collectorz.com/movies/database/brave-2012</url> <urltype>URL</urltype> </link> -<link> <description>IMDB</description> <url>http://www.imdb.com/title/tt1217209</url> <urltype>URL</urltype> </link> -<link> <description>TheMovieDb.org</description> <url>http://www.themoviedb.org/movie/62177</url> <urltype>URL</urltype> </link> -<link> <description>Trailer</description> <url>http://www.youtube.com/watch?v=tYg0VgPy6Uk</url> <urltype>Trailer URL</urltype> </link> </links> <episodecount>0</episodecount> -<lastmodified> <date>12/10/2012 4:37:03 PM</date> </lastmodified> <thumbfilepath>C:\Users\Administrator\Documents\Movie Collector\Thumbnails\CBF03186E647BB05BC635F286DC84E34.jpg</thumbfilepath> <bpmovieid>140538</bpmovieid> <bpmediaid>496821</bpmediaid> <bpmovielastreceivedrevision>58</bpmovielastreceivedrevision> <bpmedialastreceivedrevision>0</bpmedialastreceivedrevision> <plotlanguage/> <storagedevice/> -<titlefirstletter> <displayname>B</displayname> <sortname>B</sortname> </titlefirstletter> -<discs> -<disc> <title>Disc 01</title> <features/> <storagedevice/> <episodes/> </disc> -<disc> <title>Disc 02</title> <features/> <storagedevice/> <episodes/> </disc> -<disc> <title>Disc 03</title> <features/> <storagedevice/> <episodes/> </disc> -<disc> <title>Disc 04</title> <features/> <storagedevice/> <episodes/> </disc> -<disc> <title>Disc 05</title> <features/> <storagedevice/> <episodes/> </disc> </discs> <submissiondate/> </movie> </movielist> </movieinfo>
http://www.amazon.com/gp/search?keywords=786936828344+Bravetag=collectorzapp-20&index=dvd
This URL Form xml file giving error.
Remember one thing XML not Accept "&"
Two things:
First, your XML contains a lot of - characters (maybe you copied these from a Xml-editor or viewer unintentional).
Second, your XML contains a some unescaped &s in URLs; these have to be escaped (use & instead of &). Take a look at the XML specification:
The ampersand character (&) and the left angle bracket (<) may appear in their literal form only when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they must be escaped using either numeric character references or the strings "&" and "<" respectively.
StringReader reads a literal string.
Use StreamReader instead.
Or use it like :
http://forums.asp.net/t/1247855.aspx/1 giving path