3

トラバースしようとしているXMLドキュメントがあります。これはSDMXに準拠しています。ここに短いサンプルがあります:

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

ただし、C#でLinq to Xmlを使用して次のことを実行しようとすると、XmlExceptionが発生します。

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

例外テキストは次のとおりです。「:」文字、16進値0x3Aは、名前に含めることはできません。

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

4

3 に答える 3

3
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();
于 2010-11-26T20:46:17.210 に答える
0

XNamespaceを使用して、抽出しようとしているDataSet要素を修飾してみてください。

于 2010-11-26T20:50:01.683 に答える
0

私も同じ問題を抱えていました。ここでの回答の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>
于 2013-03-14T14:34:12.800 に答える