使用 Linq 分析包含尖括号的值的 XML
本文关键字:XML 包含尖 Linq 使用 | 更新日期: 2023-09-27 18:31:36
>我正在尝试使用 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 时,我从 <rule>
元素的 name 属性中的空格中收到错误。 我的解析代码如下:
XDocument doc = XDocument.Parse("<wrapper>" + xml + "</wrapper>", LoadOptions.PreserveWhitespace);
但是在没有加载选项的情况下,我得到了同样的错误。 确切的错误是:
System.Xml.dll 中发生了类型为"System.Xml.XmlException"的未处理异常。 附加信息:"美国"是一个意外的令牌。期待空白。第 1 行,位置 24。
如何使用 Linq 解析像这样包含空格的属性,有什么理由必须用"包装器"元素将 xml 括起来才能使其工作吗?
编辑:经过进一步调查,我认为错误实际上是由Linq在<rule>
元素的结束标记之前找到它不知道如何解析的内容引起的。 嵌套在 <rule>
元素中的是另一个包含已编辑值的元素,该元素的格式包括尖括号(但它不是 XML 元素)。 删除后,XML 将正常解析,不再需要<wrapper>
元素。
这些经过编辑的值在我正在使用的 XML 中非常常见。 如果我无法解析它们的 XML 基础,我如何系统地替换/删除它们(我不需要它们)? 经过编辑的值在 XML 中如下所示:
<argument>
<value>
<PII:H101(n5tSfjvfgkgVvZ2scBE9fdv2ui7O4A74R0OvGkR208Y=)>@gmail.com</value>
</argument>
以下代码已经过测试,工作正常。如果存储为字符串,则问题可能出在双引号中。
如果问题仍然存在,则必须向我们提供有关如何将此 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);
为了使输入字符串可读,我使用这种格式
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>";