質問

SDMXに準拠しているXMLドキュメントがあります。これはSDMXに準拠しています。これが短いサンプルです:

<root>
    <csf:DataSet id="J10"> 
     <kf:Series> 
       <value> 107.92
       </value> 
     </kf:Series> 
    </csf:DataSet>
</root>

ただし、C#でLINQからXMLを使用して以下を実行しようとすると、Xmlexceptionが表示されます。

XElement dataset = document.Element("csf:DataSet");

例外テキストは次のとおりです。

XMLを制御できません。これを克服する方法についてのアイデアはありますか?

役に立ちましたか?

解決

var csf = XNamespace.Get("<csfNamespaceUri>");
document.Element(csf + "DataSet");

CSF名前空間のURIを指定する必要があることに注意してください。完全な例:

var doc = XDocument.Parse(@"
<root xmlns:csf=""http://tempuri.org/1"" xmlns:kf=""http://tempuri.org/2"">
    <csf:DataSet id=""J10""> 
     <kf:Series> 
       <value> 107.92
       </value> 
     </kf:Series> 
    </csf:DataSet>
</root>
");

var dataSet = doc.Descendants(XNamespace.Get("http://tempuri.org/1") + "DataSet").Single();

他のヒント

XnamesSpaceを使用して、抽出しようとしているデータセット要素を修飾してみてください。

同じ問題がありました。ここでの答えの1つは私の道を助けてくれましたが、すべてではありませんので、ここに私の解決策 /説明があります。

あなたがする必要があるのは、このような名前空間のURLを指定することです。

XNamespace ns = "http://www.example.com";

...次に、それぞれの名前空間を準備します Element:

var someElement = new XElement(ns + "ElementName", "Value");


しかし、これが機能するためには、あなたは その特定のURIを含める必要があります 次のようにXMLで:

var rootElement = 
    new XElement(ns + "MyRootElement",
                 new XAttribute(XNamespace.Xmlns + "ns", 
                                "http://www.example.com"));

これで追加できます someElement (およびその他) rootElement, 、および名前空間は、ルートで(URLによって)参照されているため、含まれます。

rootElement.Add(someElement);
rootElement.Add(new XElement(ns + "OtherElement", "Other value"));

これにより、次のようなXMLが生成されます。

<ns:MyRootElement xmlns:ns="http://www.example.com">
    <ns:ElementName> (...) </ns:ElementName>
    <ns:OtherElement> (...) </ns:OtherElement>
</ns:MyRootElement>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top