C# Element.Parse()抛出错误
所以我试图像这样读取XML字符串C# Element.Parse()抛出错误,c#,xml,dom,linq-to-xml,C#,Xml,Dom,Linq To Xml,所以我试图像这样读取XML字符串 SaveGrammar[x].Item7 = "<condition><expression value=\"(not empty($20)) and ($20 = '1' or $20 = '2')\" /></condition><string-validity regexp=\".*\" domain=\"all-values\" />" 问题是它抛出了下面的错误 An unhandled except
SaveGrammar[x].Item7 = "<condition><expression value=\"(not empty($20)) and ($20 = '1' or $20 = '2')\" /></condition><string-validity regexp=\".*\" domain=\"all-values\" />"
问题是它抛出了下面的错误
An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll
Additional information: There are multiple root elements. Line 1, position 93
我知道我可以用英文读
XmlDocumentFragment validity = docXML.CreateDocumentFragment();
validity.InnerXml = SaveGrammar[x].Item7;
然而,我不能用DOM做我需要做的事情,我需要使用LINQ。有没有办法解决这个小问题 试试看
string xml = "<root>" + SaveGrammar[x].Item7 + "</root>";
错误是说明您有多个根元素。由于xml文件只能有一个根元素,请使用上述内容创建自己的根元素,并在解析之前将多个元素粘贴到其中。您的xml内容有两个根元素。:
<!-- root1 -->
<condition>
<expression value=\"(not empty($20)) and ($20 = '1' or $20 = '2')\" />
</condition>
<!-- root2 -->
<string-validity regexp=\".*\" domain=\"all-values\" />"
"
格式正确的xml文件应仅包含一个根目录。
<root1>
<child1>
<subchild1>.....</subchild1>
</child1>
</root1>
.....
这可以通过在内容中添加一个“parentroot”来轻松添加,使两个根嵌套在新的parentroot下面
<parnetroot>
<!-- root1 -->
<condition>
<expression value=\"(not empty($20)) and ($20 = '1' or $20 = '2')\" />
</condition>
<!-- root2 -->
<string-validity regexp=\".*\" domain=\"all-values\" />"
</parnetroot>
"
首先,您的xml文件是无效的,您是真的要解析这个xml字符串还是只读取它…?这里是从文件中获取的(我对文件没有任何控制权),正如异常所说:您有两个根/顶级节点(“”和“”),这是无效的-因为XElement想要解析单个元素,您为它提供了一个类似于两个元素列表的XML。用类似于“”+xmlString+“”
的东西包围xml字符串,然后解析该字符串。为什么在解析之前从字符串中删除
?如果你把它留在里面,解析就可以工作了,你可以很容易地在XElement
中提取子元素。谢谢,我只是用了一种不同的方法,因为它需要作为片段注入。
<root1>
<child1>
<subchild1>.....</subchild1>
</child1>
</root1>
<parnetroot>
<!-- root1 -->
<condition>
<expression value=\"(not empty($20)) and ($20 = '1' or $20 = '2')\" />
</condition>
<!-- root2 -->
<string-validity regexp=\".*\" domain=\"all-values\" />"
</parnetroot>