簡體   English   中英

如何在C#中的XML字符串中轉義無效字符

[英]How to escape invalid characters inside XML string in C#

我在C#中有一個XML字符串。 這個XML有幾個標簽。 在其中一些標簽中,文本中包含無效字符,例如“&” 我需要從整個長的XML字符串中轉義文本內的這些字符,但我想保留標簽。

我嘗試了HttpUtility.HtmlEncode和其他一些可用方法,但是它們對整個字符串進行編碼,而不是對標記內的文本進行編碼。 示例標簽是

<node1>This is a string & so is this</node1>應該轉換為

<node1>This is a string &amp; so is this</node1>

有任何想法嗎? 謝謝

附言:在我沒有找到完整的解決方案之前,我已經問過類似的問題。

我猜最簡單的解決方案是將整個Xml文檔作為XmlDocument加載到內存中,然后遍歷元素並將其值替換為其html編碼形式。

您可以使用CDATA字段,如下所示:

<YourXml>
 <Id>1</Id>
 <Content>
    <![CDATA[
           your special caracteres
     ]]>
 </content>
</yourXml>

我不明白這有什么大不了的。 當您將整個xml作為字符串使用時,實現您想要的最簡單方法是使用Replace函數。

例如,整個xml位於字符串str中,那么您要做的就是,

str.Replace("&" , "&amp;");

就是這樣。 您已經實現了您想要的一切。 有時,存在針對大問題的非常簡單的解決方案。 希望這對您有所幫助。

XDocument或XmlDocument是一種解決方法。 如果出於某種不可控制的原因,您只需要在XmlElement中編碼文本塊:

using System.Text;
using System.Xml;

static string EncodeText(string unescapedText) {
  if (string.IsNullOrEmpty(unescapedText)) {
    return unescapedText;
  }

  var builder = new StringBuilder(unescapedText.Length);
  using (var writer = XmlTextWriter.Create(builder, new XmlWriterSettings {
    ConformanceLevel = ConformanceLevel.Fragment
  })) {
    writer.WriteValue(unescapedText);
  }
  return builder.ToString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM