我有以下XML,我正在尝试"加载"到XmlDocument对象:Link to XML File
我有以下方法代码来加载XML文档:
public XmlDocument getDirections()
{
XmlTextReader xmlReader;
XmlDocument xmlResponse = new XmlDocument();
StringBuilder xmlResponseString = new StringBuilder();
xmlReader = new XmlTextReader(getRequestURL()); //getRequestURL gives the URL for XML doucument
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element)
{
xmlResponseString.Append(xmlReader.ReadInnerXml());
}
}
xmlResponse.LoadXml(xmlResponseString.ToString());
return xmlResponse;
}
当我运行代码时,出现以下错误:
An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll
Additional information: There are multiple root elements. Line 3, position 3.
我认为这是因为XML文档有多个route
对象,但我不知道如何修复它。任何帮助将不胜感激!
答案 0 :(得分:2)
它所说的行:
Additional information: There are multiple root elements. Line 3, position 3.
这是你的线索。
格式正确的XML将有1个根元素。
实施例
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
有关进一步说明,请参阅:http://www.w3schools.com/xml/xml_syntax.asp
答案 1 :(得分:1)
这样做有什么意义?使用内置功能从Url获取Xml:
var str = @"https://maps.googleapis.com/maps/api/directions/xml?origin=Jamaica,%20NY%2011418&destination=Hunter%20College%20Park%20Avenue%20New%20York&mode=&alternatives=true&key=AIzaSyB8G9omVUu6a_OQCrRM-QItdwk-Hxq__mg";
var doc = new XmlDocument();
doc.Load(str);
//or
var xdoc = XDocument.Load(str);
我会通过XDocument
调查Linq到Xml(XmlDocument
)。使用起来要容易得多。
答案 2 :(得分:0)
您可以使用以下代码段来加载xml。
public XmlDocument getDirections()
{
XmlTextReader xmlReader;
XmlDocument xmlResponse = new XmlDocument();
StringBuilder xmlResponseString = new StringBuilder();
HttpWebRequest request =HttpWebRequest.Create(getRequestURL());
using(HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
using (var responseStream = response.GetResponseStream())
{
xmlResponse.Load(responseStream);
}
}
}
xmlResponse.LoadXml(xmlResponseString.ToString());
return xmlResponse;
}
答案 3 :(得分:0)
我在尝试使用XmlReader读取Xml时遇到了类似的事件。
我的代码:
using (XmlReader reader = XmlReader.Create(new StringReader(filesContent)))
{
while (reader.Read()) //<--- This is where the exception was caught
{
// Do stuff here
}
}
遇到异常:
发生了'System.Xml.XmlException'类型的未处理异常 system.xml.dll的
其他信息:有多个根元素。 X行, 位置Y。
注意:有关异常中提供的行和位置的位置的信息不是实际行或xml文件内容中我的附加根所在的位置,这使得这有点误导。< / em>
格式正确的xml文件应仅包含一个根。就这样:
<?xml version="1.0" encoding="UTF-8" ?>
<root1>
<child1>
<subchild1>.....</subchild1>
</child1>
</root1>
在我的情况下,异常被抛出,因为我的xml文件包含2个根。
<?xml version="1.0" encoding="UTF-8" ?>
<root1>
<child1>
<subchild1>.....</subchild1>
</child1>
</root1>
<root2>
<child1>
<subchild1>.....</subchild1>
<subchild2>.....</subchild2>
</child1>
<child2>
<subchild1>.....</subchild1>
</child2>
</root2>
可以通过在文件中添加一些'parentroot'来轻松修复,使2个根嵌套在新的父根下
<?xml version="1.0" encoding="UTF-8" ?>
<parnetroot>
<root1>
<child>
<subchild>.....</subchild>
</child>
</root1>
<root2>
<child1>
<subchild1>.....</subchild1>
<subchild2>.....</subchild2>
</child1>
<child2>
<subchild1>.....</subchild1>
</child2>
</root2>
</parnetroot>