使用 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>

使用 Linq 分析包含尖括号的值的 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);

为了使输入字符串可读,我使用这种格式

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>";