[英]special chars in XML
我想解析以下XML
XmlElement costCenterElement2 = doc.CreateElement("CostCenter");
costCenterElement2.InnerXml =
"<CostCenterNumber>2</CostCenterNumber> <CostCenter>" +
"G&A: Fin & Acctng" +
"</CostCenter>";
但我發現XML異常
解析EntityName時發生錯誤。
是的- &
在XML中無效,需要轉義為&
。
其他字符無效字符及其轉義符:
<
>
"e;
'
以下應該工作:
XmlElement costCenterElement2 = doc.CreateElement("CostCenter");
costCenterElement2.InnerXml =
"<CostCenterNumber>2</CostCenterNumber> <CostCenter>" +
"G&A: Fin & Acctng" +
"</CostCenter>";
但是,您實際上應該將CostCenterNumber
和CostCenter
創建為元素而不是InnerXml
。
private string SanitizeXml(string source)
{
if (string.IsNullOrEmpty(source))
{
return source;
}
if (source.IndexOf('&') < 0)
{
return source;
}
StringBuilder result = new StringBuilder(source);
result = result.Replace("<", "<>lt;")
.Replace(">", "<>gt;")
.Replace("&", "<>amp;")
.Replace("'", "<>apos;")
.Replace(""", "<>quot;");
result = result.Replace("&", "&");
result = result.Replace("<>lt;", "<")
.Replace("<>gt;", ">")
.Replace("<>amp;", "&")
.Replace("<>apos;", "'")
.Replace("<>quot;", """);
return result.ToString();
}
更新:
@thabet,如果字符串"<CostCenterNumber>...G&A: Fin & Acctng</CostCenter>"
作為參數進入,並且應該表示要解析的XML,則必須使用格式正確的XML來從...開始。 在您給出的示例中,事實並非如此。 &
表示實體引用的開始,后跟實體名稱,並以;
結尾;
,它永遠不會出現在上面的字符串中。
如果為您提供了整個字符串作為參數,其中有些是必須解析的標記(即開始/結束標記),而有些則可能包含不應解析的標記(即&
),則沒有干凈可靠的方式“逃避”后者而不逃避前者。 您可以將所有&
字符替換為&
,但這樣做可能會意外地使 
進入&#160;
並且您得到的內容將是錯誤的。 如果是這種情況,那么您將收到輸入“ XML”,其中標記與無法解析的文本混合在一起,最好的辦法是告訴從您那里獲得XML的人,該XML格式不正確,他們需要修復其輸出。 。 使用標准XML工具,他們可以通過多種方法做到這一點。
另一方面,如果您有
<CostCenterNumber>2</CostCenterNumber>
<CostCenter>...</CostCenter>
與傳遞的字符串分開,您需要將傳遞的字符串作為子<CostCenter>
的文本內容<CostCenter>
,並且知道它不會被解析(不包含元素),那么您可以執行以下操作:
<CostCenterNumber>
和<CostCenter>
作為元素 <CostCenter>
eltCCN.InnerXml = "2";
textCC = doc.CreateText(argStr)
; eltCC.AppendChild(textCC);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.