(這個答案是基於你在處理結構正確的XML,只是在#text
節點未編碼的實體的假設 - 如果你輸入的數據確實像<Title="foo" />
這個答案並不適用 - 這根本不是XML)
如果我正確理解您的問題,您在String
實例中包含一個XML文檔,其中包含不正確地轉義/賦值的特殊字符,這會阻止您使用正常的XML解析器來讀取文檔。
如果您正在處理符合XML標準的系統,那麼您可以使用<![DATA[
,然後不需要嘗試處理<Content>
元素的內容,然後就會插入CDATA分隔符。
雖然人們經常說不能使用正則表達式來解析XML(因爲XML不是Regular Language),但您可以利用XML的語法規則來提取和識別標記。
所以,如果你有這樣的:
<Content someAttribute="someValue">
reduce sales by <1% in order to ensure that profit > loss
</Content>
然後,你可以這樣做:
String doc = @"<main><Title...";
Int32 contentOpenStart = doc.IndexOf("<Content");
Int32 contentOpenEnd = doc.IndexOf(">", contentOpenStart);
Int32 contentCloseStart = doc.IndexOf("</Content>", contentOpenEnd);
那麼這段代碼告訴我們<Content>
元素的兩個標籤的尖括號的locatations,與我們可以插入CDATA分隔符:
String newDocument = String.Concat(
doc.Substring(0, contentOpenEnd + 1), // "<main>...<Content...>"
"<![CDATA[",
doc.Substring(contentOpenEnd + 1, contentCloseStart),
"]]>",
doc.Substring(contentCloseStart) "</Content>..."
);
newDocument
將會是這樣的:
<Content someAttribute="someValue"><![CDATA[
reduce sales by <1% in order to ensure that profit > loss
]]></Content>
...這是有效的XML。
來源
2016-10-04 05:48:22
Dai
這似乎不是一個有效的XML。 –
' '根本就不是有效的XML,因爲沒有匿名屬性。你的意思是' foo '而不是? –
Dai
你好,我已經更新了原始代碼...它應該是<內容=「bla bla bla ... <1%to ??? on other bla bla ....」/> – Trowa