我想用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選擇和標題匹配。 –