C# Element.Parse()抛出错误

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

所以我试图像这样读取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 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>