我使用XmlWriter.Create()
來獲取編寫器實例然後編寫XML,但結果是<?xml version="1.0" encoding="utf-16" ?>
,我該如何告訴我的xml編寫器不生成它?如何使用xml編寫器創建xml而不聲明元素
回答
使用XmlWriterSettings.OmitXmlDeclaration
。
不要忘記將XmlWriterSettings.ConformanceLevel
設置爲ConformanceLevel.Fragment
。
你也可以繼承XmlTextWriter
並重寫WriteStartDocument()
方法什麼都不做:
public class XmlFragmentWriter : XmlTextWriter
{
// Add whichever constructor(s) you need, e.g.:
public XmlFragmentWriter(Stream stream, Encoding encoding) : base(stream, encoding)
{
}
public override void WriteStartDocument()
{
// Do nothing (omit the declaration)
}
}
用法:
var stream = new MemoryStream();
var writer = new XmlFragmentWriter(stream, Encoding.UTF8);
// Use the writer ...
參考:這blog post斯科特Hanselman的。
謝謝,有什麼更好的辦法?我不想爲了刪除聲明而繼承子類。 – ninithepug
@ninithepug:據我所知,不好意思。不過,如果你經常使用它,你可以將它包裝在某個靜態方法中。這應該有助於保持它的清潔 – Cameron
謝謝你,欣賞它 – ninithepug
你可以使用XmlWriter.Create()
有:
new XmlWriterSettings { OmitXmlDeclaration = true, ConformanceLevel = ConformanceLevel.Fragment }
public static string FormatXml(string xml)
{
if (string.IsNullOrEmpty(xml))
return string.Empty;
try
{
XmlDocument document = new XmlDocument();
document.LoadXml(xml);
using (MemoryStream memoryStream = new MemoryStream())
using (XmlWriter writer = XmlWriter.Create(memoryStream, new XmlWriterSettings { Encoding = Encoding.Unicode, OmitXmlDeclaration = true, ConformanceLevel = ConformanceLevel.Fragment, Indent = true, NewLineOnAttributes = false }))
{
document.WriteContentTo(writer);
writer.Flush();
memoryStream.Flush();
memoryStream.Position = 0;
using (StreamReader streamReader = new StreamReader(memoryStream))
{
return streamReader.ReadToEnd();
}
}
}
catch (XmlException ex)
{
return "Unformatted Xml version." + Environment.NewLine + ex.Message;
}
catch (Exception ex)
{
return "Unformatted Xml version." + Environment.NewLine + ex.Message;
}
}
- 1. 如何使用xml.etree.ElementTree編寫XML聲明
- 2. 從C#中的XML編寫器創建XML元素對象#
- 3. 如果不使用linq-to-xml創建xml元素如何不創建xml元素
- 4. 如何使用FSharp創建XML屬性(而不是元素)?
- 5. 如何使用xslt創建xml元素?
- 6. XML元素未聲明
- 7. 編寫XML元素
- 8. 從瀏覽器序列化XML DOM不會創建XML聲明
- 9. 使用屬性xml編寫元素php
- 10. 沒有命名空間聲明創建XML元素
- 11. 使用java編輯xml聲明編碼
- 12. 使用ColdFusion驗證XML時找不到元素的聲明10
- 13. 使用「$ XYZ」創建XML元素
- 14. 使用「image:image」創建XML元素
- 15. 使用xml元素創建kml文件
- 16. 使用XSLT自動創建xml元素
- 17. XML檢查忽略聲明的元素
- 18. XML無法找到元素的聲明
- 19. 無法找到元素'xml'的聲明
- 20. 使用PHP,如何訪問由XML模式聲明聲明的XML元素的屬性?
- 21. 如何生成元素的XML和屬性使用XML明確
- 22. Android:如何編寫layoutAnimation而不是xml
- 23. 如何從XML元素創建類?
- 24. 如何在XML中創建新元素?
- 25. JAXB如何創建其他XML元素
- 26. 如何在XML元素之間爲數據編寫linq-to-xml?
- 27. 創建新的XML元素
- 28. XML - 創建元素 - 新行
- 29. XML元素未創建
- 30. JAXB - XML聲明未被創建
從您鏈接到文檔:'如果ConformanceLevel設置爲文件,即使OmitXmlDeclaration設置爲TRUE; – Cameron
@Cameron XML聲明總是寫的,真和? –
大部分時間不會設置爲文檔嗎? – Cameron