我想用Linq来解析存储在一个字符串中的XML片段。下面是XML:用包含尖括号的值解析XML,使用Linq
<rule name="U.S. Financial: PCI">
<keyValues>
<keyValue key="id" value="3421c776-c95f-4ed2-915b-a684b97ae06b" />
<keyValue key="minCount" value="1" />
</keyValues>
</rule>
当我试图解析XML,我从<rule>
元素的name属性的空格得到一个错误。我的解析代码如下:
XDocument doc = XDocument.Parse("<wrapper>" + xml + "</wrapper>", LoadOptions.PreserveWhitespace);
但是,如果没有LoadOption,我会得到相同的错误。确切的错误是:
在System.Xml.dll中发生未处理的类型为'System.Xml.XmlException'的异常。附加信息:'美国'是一个意外的标记。期待空白。第1行,第24位。
如何使用Linq解析包含空白的属性,以及为什么我必须将xml与“包装器”元素一起包围才能使其工作?
编辑:进一步调查后,我认为错误实际上是由LINQ的发现引起一些它不知道如何为<rule>
元素的结束标记之前解析。嵌套在<rule>
元素中的是其他包含redacted值的元素,其格式中包含尖括号(但不是XML元素)。当被移除时,XML通常解析并且不再需要<wrapper>
元素。
这些编辑值在我工作的XML中非常常见。如果我不能解析它们的XML,我该如何系统地替换/删除它们(我不需要它们)?编辑值在XML中看起来像这样:
<argument>
<value>
<PII:H101(n5tSfjvfgkgVvZ2scBE9fdv2ui7O4A74R0OvGkR208Y=)>@gmail.com</value>
</argument>
如果它被存储为一个字符串,试着用单引号替换所有的双引号(”到“)。我已经测试过它没有“包装”,它工作正常 –
@WesH我也不能重现该问题,请参阅演示:https://dotnetfiddle.net/w1rWdJ – har07
我挖了一点,并相信我找到了根本原因:进一步下来的redacted值包含尖括号,这似乎是导致错误的原因。我不确定如何删除这些值,但是如果我不能解析XML,我会更新qu选择和标题匹配。 –