[英]escaped xml with cdata that has also has both escaped data value and tags
我正在從Web服務接收xml數據,該服務將所有數據作為一個轉義的xml字符串返回。 但是,無論出於何種原因,xml的一部分都包含在cdata標記內。 cdata中的轉義xml通常也將包含轉義的xml字符。 例:
<root>
<importData>dat</importData>
<Response>
<![CDATA[<SecondRoot>
<Data>123</Data>
<DataEscapedCharacterIncluded> 3 > 1</DataEscapedCharacterIncluded>
</SecondRoot>]]>
</Response>
</root>
我需要使用xsl將cdata部分內外的xml轉換為另一種xml格式的xsl,但是我很難弄清楚如何使用c#或xsl將其轉換成可用的xml格式,所以我可以xsl轉換為其他格式。 我希望它看起來像下面的樣子:
<root>
<importData>dat</importData>
<Response>
<SecondRoot>
<Data>123</Data>
<DataEscapedCharacterIncluded> 3 > 1</DataEscapedCharacterIncluded>
</SecondRoot>
</Response>
<root>
您顯示的數據可能無法正確轉義。 如果不對其進行轉義,則可能會生成格式不正確的XML。 考慮這一行:
<DataEscapedCharacterIncluded> 3 > 1</DataEscapedCharacterIncluded>
如果您取消轉義,它將變為:
<DataEscapedCharacterIncluded> 3 > 1</DataEscapedCharacterIncluded>
這仍然是有效的(不需要大於),但是我認為您也將<
在某個地方, 必須逃脫。 如果它是雙重逃脫的,那應該沒問題。
要對此進行轉換,您可以執行以下幾項操作:
disable-output-escaping
設置為yes
來disable-output-escaping
,另一次進行實際的轉換。 fn:parse-xml
或fn:parse-xml-fragment
,可以將XML as-a-string作為輸入。 從您的帖子中還不能完全清楚的是它是否被雙重刪除了。 即,如果您的數據如下所示:
<elem><![CDATA[<root>bla</root>]]></elem>
它是唯一逃脫的。 如果看起來像這樣:
<elem><![CDATA[<root>bla</root>]]></elem>
它是雙重逃脫的。 在后一種情況下,您將需要執行一個額外的轉義循環,然后才能對其進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.