2016-12-08 1 views
0

私は、コードを持っている:私はの出力期待このXmlDocumentをビルドするときにC#が2番目のxml名前空間属性を削除するのはなぜですか?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml; 

namespace XmlNameSpacingTesting 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XmlDocument output = new XmlDocument(); 
      XmlNode baseNode = output.CreateElement("idat"); 
      XmlAttribute xmlnsAttribute = output.CreateAttribute("xmlns:xsi"); 
      xmlnsAttribute.Value = "http://www.w3.org/2001/XMLSchema-instance"; 
      baseNode.Attributes.Append(xmlnsAttribute); 
      XmlAttribute xsiAttribute = output.CreateAttribute("xsi:noNamespaceSchemaLocation"); 
      xsiAttribute.Value = "C:\\sub.xsd"; 
      baseNode.Attributes.Append(xsiAttribute); 
      output.AppendChild(baseNode); 
      // DumbSubNode 
      XmlNode firstNode = output.CreateElement("Sub-Node1"); 
      firstNode.InnerText = "Single Sub-Node"; 
      baseNode.AppendChild(firstNode); 
      output.Save("Test.xml"); 
     } 
    } 
} 

<idat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\sub.xsd"> 
    <Sub-Node1>Single Sub-Node</Sub-Node1> 
</idat> 

をしかし、私はの出力を得る:それは離れて取ってXmlAttribute xsiAttributeで

<idat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="C:\sub.xsd"> 
    <Sub-Node1>Single Sub-Node</Sub-Node1> 
</idat> 

を"xsi:"と私は理由を知らない。どんな助け?

答えて

1

変更を芽。

<idat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\sub.xsd"> 
    <Sub-Node1>Single Sub-Node</Sub-Node1> 
</idat> 

xsi prefix属性がな名前空間http://www.w3.org/2001/XMLSchema-instanceに定義されています。

XmlAttribute xsiAttribute = output.CreateAttribute("xsi:noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance"); 
xsiAttribute.Value = "C:\\sub.xsd"; 

これは正しいXMLを生成します。 URI名前空間を指定しない場合は、xsiの未確認属性とみなされるため、xsiは削除されました。 詳細については、https://www.w3.org/TR/xmlschema-1/#xsi.noNamespaceSchemaLocation

+0

それはチケットだった。本当にありがとう! –

-2

クイックスキャンを読んでください。 XmlAttribute xsiAttribute = output.CreateAttribute( "xsi:" + "noNamespaceSchemaLocation");

、それは

歓声を動作しているなら、私に知らせてくださいは、スキーマの名前空間を含めるようにxsiAttribute

+0

を試しても機能しませんでした。私がコメントしている間、誰かがあなたを落胆させました。私ではありませんでした。私は誰かを倒してもらうために必要な125の評判を持っていません。 –

+0

@BradB。しかし、それが全く機能しないなら、あなたは* downvoteするでしょうか? –

+0

@Alexei Levenkov私は投票するのが好きです。下降投票は何も教えない。 "xsi:" + "noNamespaceSchemaLocation"は操作と文字列オブジェクトの順序の性質のために "xsi:noNamespaceSchemaLocation"とまったく同じであると言います。 –

関連する問題