我有一个字符串输入,我不知道是否有效xml。
我认为最简单的方法是包装
new XmlDocument().LoadXml(strINPUT);
在try / catch中。
我面临的问题是,如果此文件的标题包含
,有时strINPUT
是一个html文件
<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">
<html xml:lang=""en-GB"" xmlns=""http://www.w3.org/1999/xhtml"" lang=""en-GB"">
...像许多人一样,它实际上试图建立与w3.org网址的连接,我真的不想这样做。
任何人都知道是否可以解析字符串而不试图聪明并检查外部网址?如果做错了,可以选择xmldocument
吗?
答案 0 :(得分:6)
尝试以下方法:
XmlDocument doc = new XmlDocument();
using (var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings() {
ProhibitDtd = true,
ValidationType = ValidationType.None
})) {
doc.Load(reader);
}
该代码创建了一个关闭DTD处理和验证的阅读器。检查身体状况仍然适用。
如果您可以切换到使用XDocument而不是XDocument.Parse
,则可以使用XmlDocument
。
答案 1 :(得分:2)
我不确定问题背后的原因,但您是否尝过XDocument
中的XElement和System.Xml.Linq课程 XDocument document = XDocument.Load(strINPUT , LoadOptions.None);
XElement element = XElement.Load(strINPUT );
编辑,对于xml,string
请尝试按照
XDocument document = XDocument.Parse(strINPUT , LoadOptions.None );
答案 2 :(得分:1)
使用XmlDocument的加载方法加载xml文档,使用XmlNodeList获取元素,然后检索数据...... 尝试以下方法:
XmlDocument xmlDoc = new XmlDocument();
//use the load method to load the XML document from the specified stream.
xmlDoc.Load("myXMLDoc.xml");
//Use the method GetElementsByTagName() to get elements that match the specified name.
XmlNodeList item = xDoc.GetElementsByTagName("item");
XmlNodeList url = xDoc.GetElementsByTagName("url");
Console.WriteLine("The item is: " + item[0].InnerText));
在上面的代码周围添加一个try / catch块,看看你抓到了什么,修改你的代码来解决这种情况。