簡體   English   中英

如何在C#.Net中使用XmlWriter格式化XML?

[英]How to format XML using XmlWriter in C#.Net?

我想要XML格式,如:

  <?xml version="1.0" encoding="UTF-8"?>
  <ac:Main xmlns:trip="http://www.test.com/main.xsd"
     xmlns:abc="http://www.test.com/Types.xsd"
     xmlns:tw="http://www.test.com/TW.xsd"
     xmlns:ck="http://www.test.com/CK.xsd"
     xmlns:k1="http://www.test.com/K1.xsd"
     xmlns:d1="http://www.test.com/D1.xsd"
     xmlns:ac="http://www.test.com/Ac.xsd"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.test.com/Ac.xsd file:/D:/schema/AC.xsd">
        <ac:Records>
            <d1:Header>
           <abc:FirstElement>firstValue</abc:FirstElement>
        </d1:Header>
       </ac:Records>
     </ac:Main>

因此,我使用XmlWriter編寫了如下代碼:

      using (XmlWriter writer = XmlWriter.Create(path, settings))
        {
            writer.WriteStartElement("ac", "Main", "xmlns");
            writer.WriteAttributeString("xmlns", "trip", null,  http://www.test.com/main.xsd");
            writer.WriteAttributeString("xmlns", "abc", null,    http://www.test.com/Types.xsd");
            writer.WriteAttributeString("xmlns", "tw", null, http://www.test.com/TW.xsd");
            writer.WriteAttributeString("xmlns", "kc", null, "http://www.test.com/CK.xsd");
            writer.WriteAttributeString("xmlns", "k1", null, "http://localhost:8080/K1.xsd");
            writer.WriteAttributeString("xmlns", "d1", null, "http://localhost:8080/D1.xsd");                  
            writer.WriteAttributeString("xsi","schemaLocation", "http://www.w3.org/2001/XMLSchema-instance", "http://www.test.com/Ac.xsd file:/D:/schema/AC.xsd");

           // writer.WriteAttributeString("xmlns", "ac", null, "http://www.test.com/Ac.xsd ");

            writer.WriteStartElement("ac", "Records", "xmlns");  
            writer.WriteStartElement("d1", "Header", "xmlns");

            writer.WriteStartElement("abc", "FirstElement", "xmlns");
            writer.WriteString("firstValue");
            writer.WriteEndElement(); 
            writer.WriteEndElement(); 
            writer.WriteEndElement(); 
        }

但取消注釋行writer.WriteAttributeString(“ xmlns”,“ ac”,null,“ http://www.test.com/Ac.xsd”); 產生錯誤“無法在同一開始元素標記中將前綴“ ac”從“ xmlns”重新定義為“ http://www.test.com/Ac.xsd”。

因此,我對上面的代碼中的那一行表示贊賞,並得到如下輸出:

 <?xml version="1.0" encoding="utf-8"?>
    <ac:Main 
     xmlns:wctrp="http://www.test.com/main.xsd"
     xmlns:abc="http://www.test.com/Types.xsd"
     xmlns:tw="http://www.test.com/TW.xsd"
     xmlns:ck="http://www.test.com/CK.xsd"
     xmlns:k1="http://www.test.com/K1.xsd"
     xmlns:d1="http://www.test.com/D1.xsd"
     xmlns:ac="http://www.test.com/Ac.xsd"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.test.com/Ac.xsd file:/D:/schema/AC.xsd" 
     xmlns:ac="xmlns">
      <ac:Records>
            <d1:Header xmlns:hd1="xmlns">
        <abc:FirstElement  xmlns:iaiabc="xmlns">firstValue</abc:FirstElement>
        </d1:Header>
      </ac:Records>
     </ac:Main>

不需要的服裝是元素“ Main”中的xmlns:ac =“ xmlns”,'d1:Header'中的xmlns:hd1 =“ xmlns”和
abc:FirstElement中的xmlns:iaiabc =“ xmlns”。

有人可以建議我該怎么做,以刪除不想要的衣服,並以最高格式獲得輸出。

我是XmlWriter的新手。

您正在濫用WriteStartElement。 命名空間不應該是xmlns。 它應該是您將要使用的實際名稱空間。 另外,由於ac的第一次出現是在寫入屬性之前發生的,因此請不要為ac包括xmlns屬性行。 交流的xmlns屬性將由編寫器自動生成。

您實際上可以省去所有xmlns屬性行,但是隨后將在出現它們的第一個元素上聲明名稱空間。

    using (XmlWriter writer = XmlWriter.Create(path))
    {
        writer.WriteStartElement("ac", "Main", "http://www.test.com/Ac.xsd");
        writer.WriteAttributeString("xmlns", "trip", null, "http://www.test.com/main.xsd");
        writer.WriteAttributeString("xmlns", "abc", null, "http://www.test.com/Types.xsd");
        writer.WriteAttributeString("xmlns", "tw", null, "http://www.test.com/TW.xsd");
        writer.WriteAttributeString("xmlns", "kc", null, "http://www.test.com/CK.xsd");
        writer.WriteAttributeString("xmlns", "k1", null, "http://localhost:8080/K1.xsd");
        writer.WriteAttributeString("xmlns", "d1", null, "http://localhost:8080/D1.xsd");                  
        writer.WriteAttributeString("xsi","schemaLocation", "http://www.w3.org/2001/XMLSchema-instance", "http://www.test.com/Ac.xsd file:/D:/schema/AC.xsd");

        writer.WriteStartElement("ac", "Records", "http://www.test.com/Ac.xsd");  
        writer.WriteStartElement("d1", "Header", "http://localhost:8080/D1.xsd");

        writer.WriteStartElement("abc", "FirstElement", "http://www.test.com/Types.xsd");
        writer.WriteString("firstValue");
        writer.WriteEndElement(); 
        writer.WriteEndElement(); 
        writer.WriteEndElement(); 
    }

暫無
暫無

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

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