C# 使用Linq解析包含尖括号的值的XML

C# 使用Linq解析包含尖括号的值的XML,c#,xml,linq,C#,Xml,Linq,我试图使用Linq解析XML片段,它存储在字符串中。以下是XML: <rule name="U.S. Financial: PCI"> <keyValues> <keyValue key="id" value="3421c776-c95f-4ed2-915b-a684b97ae06b" /> <keyValue key="minCount" value="1" /> </keyValues> </rule&

我试图使用Linq解析XML片段,它存储在字符串中。以下是XML:

<rule name="U.S. Financial: PCI">
  <keyValues>
    <keyValue key="id" value="3421c776-c95f-4ed2-915b-a684b97ae06b" />
    <keyValue key="minCount" value="1" />
  </keyValues>
</rule>

当我尝试解析XML时,我从
元素的name属性中的空白处得到一个错误。我的解析代码如下所示:

XDocument doc = XDocument.Parse("<wrapper>" + xml + "</wrapper>", LoadOptions.PreserveWhitespace);
XDocument doc=XDocument.Parse(“+xml+”,LoadOptions.PreserveWhitespace);
但是如果没有LoadOption,我会得到同样的错误。确切的错误是:

System.Xml.dll中发生类型为“System.Xml.XmlException”的未处理异常。附加信息:“U.S.”是一个意外标记。需要空白。第1行,位置24

我如何使用Linq解析这样包含空格的属性,有什么理由必须用“包装器”元素来包围xml以使其工作

EDIT:在进一步调查之后,我认为这个错误实际上是因为Linq在
元素的结束标记之前发现了它不知道如何解析的东西。嵌套在
元素中的另一个元素包含一个经过编辑的值,该值的格式中包含尖括号(但它不是XML元素)。删除后,XML将正常解析,不再需要
元素

这些经过编辑的值在我使用的XML中非常常见。如果因为它们而无法解析XML,如何系统地替换/删除它们(我不需要它们)?在XML中,经过编辑的值如下所示:

<argument>
 <value>
  <PII:H101(n5tSfjvfgkgVvZ2scBE9fdv2ui7O4A74R0OvGkR208Y=)>@gmail.com</value>
</argument>

@gmail.com

以下代码经过测试,运行良好。 如果双引号存储为字符串,则问题可能出在双引号中

string xml = "<rule name='U.S. Financial: PCI'>  <keyValues>    <keyValue key='id' value='3421c776-c95f-4ed2-915b-a684b97ae06b' />    <keyValue key='minCount' value='1' />  </keyValues></rule>";
XDocument doc = XDocument.Parse( xml);
如果您的问题仍然存在,您必须向我们提供有关如何将此XML拉入字符串的更多信息

string xml = "<rule name='U.S. Financial: PCI'>  <keyValues>    <keyValue key='id' value='3421c776-c95f-4ed2-915b-a684b97ae06b' />    <keyValue key='minCount' value='1' />  </keyValues></rule>";
XDocument doc = XDocument.Parse( xml);
stringxml=”“;
XDocument doc=XDocument.Parse(xml);

要使输入字符串可读,我使用此格式

string xml =
                "<rule name=\"U.S. Financial: PCI\">" +
                  "<keyValues>" +
                    "<keyValue key=\"id\" value=\"3421c776-c95f-4ed2-915b-a684b97ae06b\" />" +
                    "<keyValue key=\"minCount\" value=\"1\" />" +
                  "</keyValues>" +
                "</rule>";
stringxml=
"" +
"" +
"" +
"" +
"" +
"";

如果它存储为字符串,请尝试用单引号(“to”)替换所有双引号。我已经在没有“包装器”的情况下对其进行了测试“它工作得很好。@WesH我也不能重现这个问题,请看演示:我进一步挖掘了一下,相信我已经找到了根本原因:向下编辑的值包含尖括号,这似乎是导致错误的原因。但是,如果我不能首先解析XML,我不知道如何删除这些值。我更新了问题和标题以匹配。