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

标签 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>

当我尝试解析 XML 时,我从 <rule> 的名称属性中的空格中得到一个错误元素。我的解析代码如下:

XDocument doc = XDocument.Parse("<wrapper>" + xml + "</wrapper>", LoadOptions.PreserveWhitespace);

但是我在没有 LoadOption 的情况下得到了同样的错误。确切的错误是:

An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll. Additional information: 'U.S.' is an unexpected token. Expecting white space. Line 1, position 24.

我如何使用 Linq 解析像这样包含空格的属性,以及为什么我必须用“包装器”元素包围 xml 才能使其工作?

编辑: 进一步调查后,我认为该错误实际上是由于 Linq 在 <rule> 的结束标记之前发现它不知道如何解析的内容引起的。元素。嵌套在 <rule> element 是另一个包含编辑值的元素,其格式中包含尖括号(但它不是 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);

关于c# - 使用 Linq 解析包含尖括号的值的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34961878/

相关文章:

c# - 如何在 L2E 或 EF 中使用外键?

xml - 如何使用xslt比较和合并两个xml

c# - 通过 LINQ 中的属性缓冲表达式(对比 Lambda)

xml - XML 解析器和 XML 处理器是否相同?

xml - 根据同胞的值选择 XML 元素

c# - 如何将两个 Entity Framework 调用合并为一个?

c# - 如何将旧式 Windows 图元文件写入文件

c# - 通用类中的静态列表

c# - WinForms MVP 是否有另一种方法可以将数据绑定(bind)到 View 而无需 Presenter 访问 View 控件?

php - 如何在xml和php中只查询一个节点?