C# 使用Linq解析包含尖括号的值的XML
我试图使用Linq解析XML片段,它存储在字符串中。以下是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&
<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,我不知道如何删除这些值。我更新了问题和标题以匹配。