簡體   English   中英

C#:如何在XML文件中刪除一行?

[英]C#: How to remove a line in XML file?

可能這是一個愚蠢的問題,但是我需要刪除XML文件中的第一行。 這是一行:

<?xml version="1.0" encoding="utf-16"?>

這樣做時

string xmlToSend = ClassToXML(myObject);

string newString= xmlToSend.Replace("<?xml version=\"1.0\" encoding=\"utf - 16\"?>", string.Empty);

什么都沒發生。

該文件仍然在那里。

我有一個將對象序列化為XML字符串並返回該字符串的方法。 如何從該字符串中刪除XML聲明?

private string ClassToXML(Object classObject)
{
    var myString = new System.IO.StringWriter();
    var serializer = new XmlSerializer(classObject.GetType());
    System.Xml.XmlWriter xw = System.Xml.XmlWriter.Create(sb, new System.Xml.XmlWriterSettings()
    {
        OmitXmlDeclaration = true,
        ConformanceLevel = System.Xml.ConformanceLevel.Auto,
        Indent = true
    });

    //serializer.Serialize(myString, classObject);
    serializer.Serialize(xw, classObject);

    return myString.ToString();

}

我想念什么?

您的replace中有幾個額外的空間,這就是為什么它什么也不做的原因,我認為這應該起作用:

string newString = xmlToSend.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", string.Empty);

但是您可能不應該這樣做,因為它很脆弱,並且如果聲明中有任何差異,它就會中斷,例如,以下都是有效的XML聲明:

<?xml version="1.0"  encoding="utf-16"?>
<?xml version="1.0" encoding="utf-16" ?>
<?xml encoding="utf-16" version="1.0" ?>
<?xml version="1.0" encoding="utf-8"?>

相反,您應該使用了解如何解析聲明的XML解析器,然后編寫不帶聲明的片段,例如:

var doc = XDocument.Load("ConsoleApp1.exe.config");
var settings = new XmlWriterSettings
{
    OmitXmlDeclaration = true
};
var memoryStream = new MemoryStream();
using (var writer = XmlWriter.Create(memoryStream, settings))
{
    doc.WriteTo(writer);
}
var newString = Encoding.UTF8.GetString(memoryStream.ToArray());

在您的示例中,您有一個方法ClassToXML您可以在該方法中執行此操作。

Replace()不會更改原始字符串,而是將結果輸出到新字符串。

使用此代替:

xmlToSend = xmlToSend.Replace("<?xml version=\"1.0\" encoding=\"utf - 16\"?>", string.Empty);

這是對您的問題的嚴格回答,但是在處理XML時,您實際上應該使用Xml操作類。

間距與外觀不同。 您可以從更簡單的檢查開始,即它是否完全可以找到您的字符串

xmlToSend.IndexOf("<?xml version=\\"1.0\\" encoding=\\"utf-16\\"?>")

理想情況下,您可以通過一些識別XML而不是特定字符串的C#代碼來處理此問題。 有一個問題在這里關於省略XML聲明,可以幫助你。

暫無
暫無

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

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