[英]XML with namespace using XmlWriter
我正在用c#創建XML文檔。 我想通過XmlWriter
創建此輸出。 但是我無法獲得確切的輸出。
這是我需要生成的:
<ITRETURN:ITR xmlns:ITRETURN="http://incometaxindiaefiling.gov.in/main" xmlns:ITR1FORM="http://incometaxindiaefiling.gov.in/ITR1" xmlns:ITRForm="http://incometaxindiaefiling.gov.in/master" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ITR1FORM:ITR1>
<ITRForm:CreationInfo>
<ITRForm:SWVersionNo>R1</ITRForm:SWVersionNo>
<ITRForm:SWCreatedBy>SW92201920</ITRForm:SWCreatedBy>
<ITRForm:XMLCreatedBy>SW92201920</ITRForm:XMLCreatedBy>
<ITRForm:XMLCreationDate>2019-07-19</ITRForm:XMLCreationDate>
<ITRForm:IntermediaryCity>Delhi</ITRForm:IntermediaryCity>
<ITRForm:Digest>lOa90+jndV+RYN0ghOemod4eomQDqsSm6tw3w8XWsZQ= </ITRForm:Digest>
</ITRForm:CreationInfo>
</ITR1FORM:ITR1>
</ITRETURN:ITR>
如何使用XmlWriter
生成它?
您可以使用以下代碼編寫該XML:
// Namespace constants
var ITRETURN = @"http://incometaxindiaefiling.gov.in/main";
var ITR1FORM = @"http://incometaxindiaefiling.gov.in/ITR1";
var ITRForm = @"http://incometaxindiaefiling.gov.in/master";
var xsi = @"http://www.w3.org/2001/XMLSchema-instance";
// Enable indenting and disable the XML declaration.
var settings = new XmlWriterSettings
{
Indent = true,
IndentChars = " ",
OmitXmlDeclaration = true,
};
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
{
// Write the start element and all namespaces.
xmlWriter.WriteStartElement("ITRETURN", "ITR", ITRETURN);
xmlWriter.WriteAttributeString("xmlns","ITRETURN", null, ITRETURN);
xmlWriter.WriteAttributeString("xmlns","ITR1FORM", null, ITR1FORM);
xmlWriter.WriteAttributeString("xmlns","ITRForm", null, ITRForm);
xmlWriter.WriteAttributeString("xmlns","xsi", null, xsi);
// Write the ITR1 element
xmlWriter.WriteStartElement("ITR1", ITR1FORM);
// Write the CreationInfo
xmlWriter.WriteStartElement("CreationInfo", ITRForm);
xmlWriter.WriteElementString("SWVersionNo", ITRForm, "R1");
xmlWriter.WriteElementString("SWCreatedBy", ITRForm, "SW92201920");
xmlWriter.WriteElementString("XMLCreatedBy", ITRForm, "SW92201920");
xmlWriter.WriteElementString("XMLCreationDate", ITRForm, "2019-07-19");
xmlWriter.WriteElementString("IntermediaryCity", ITRForm, "Delhi");
xmlWriter.WriteElementString("Digest", ITRForm, "lOa90+jndV+RYN0ghOemod4eomQDqsSm6tw3w8XWsZQ= ");
xmlWriter.WriteEndElement(); // CreationInfo
xmlWriter.WriteEndElement(); // ITR1
xmlWriter.WriteEndElement(); // ITR
}
筆記:
在上面的代碼中, textWriter
是一些正在寫入XML的StreamWriter
或StringWriter
。
使用指定名稱空間中的元素直接編寫XML時,通常應避免對名稱空間prefix進行硬編碼。 而是使用XmlWriter
本地名稱和完整名稱空間的XmlWriter
方法,例如XmlWriter.WriteStartElement(string localName, string ns)
或XmlWriter.WriteElementString(string localName, string ns, string value)
。
如果確實需要對某些前綴進行硬編碼,請參見Ryan B關於在XmlWriter中添加多個名稱空間聲明的 此答案 ,以獲取有關如何編寫必要屬性的說明。 您還需要使用XmlWriter.WriteStartElement(string prefix, string localName, string ns)
為聲明名稱空間的元素(此處為根元素)手動編寫一個前綴。 但是,一旦定義了前綴,所有子元素都將自動選擇它們。
(不必對前綴進行硬編碼。只要接收系統正確解析了XML名稱空間,所使用的前綴就無關緊要。當然,並非所有接收系統都正確解析XML ...)
我對XML進行了縮進,並省略了XML聲明,如您的問題所示。
如果Digest
實際上是生產代碼中的字節數組,則可以使用XmlWriter.WriteBase64(byte[] buffer, int index, int count)
輕松將其寫為Base64。
演示在這里擺弄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.