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

时间:2016-01-23 09:39:37

标签: 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>元素的name属性中的空格中得到错误。我的解析代码如下:

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

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

  

未处理的类型&#39; System.Xml.XmlException&#39;发生在System.Xml.dll中。附加信息:&#39;美国&#39;是一个意外的令牌。期待白色空间。第1行,第24位。

我如何使用Linq解析包含空格的这样的属性,并且有任何理由我必须使用&#34;包装器&#34;来包围xml。使它运作的元素?

编辑:经过进一步调查后,我认为该错误实际上是由Linq发现的,它不知道如何在<rule>元素的结束标记之前解析。嵌套在<rule>元素中的是包含编辑值的其他元素,其格式中包含尖括号(但它不是XML元素)。删除后,XML会正常解析,不再需要<wrapper>个元素。

这些编辑后的值在我工作的XML中非常常见。如果我无法解析XML,那我怎么能系统地替换/删除它们(我不需要)他们)?编辑后的值在XML中如下所示:

<argument>
 <value>
  <PII:H101(n5tSfjvfgkgVvZ2scBE9fdv2ui7O4A74R0OvGkR208Y=)>@gmail.com</value>
</argument>

2 个答案:

答案 0 :(得分:0)

以下代码已经过测试并且运行正常。 如果它存储为字符串,则您的问题可能在双引号中。

如果您的问题仍然存在,则必须向我们提供有关如何将此XML拉入字符串的更多信息。

WHERE NOT user_id IN ('1', '2', '3') AND thread_id = tm.thread_id)

答案 1 :(得分:0)

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

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