質問

間に違いはありますか

<opensearch:totalResults>1000</opensearch:totalResults>

<totalResults xmlns="opensearch">1000</totalResults>

.NETのSyndicationFeedクラスを使用してAtom Feedを生成します。OpenSearch標準にいくつかの要素を追加する必要がありますが、前者のように追加したいときに上記の要素のような要素を追加し続けます。

コード:

feed.ElementExtensions.Add("totalResults", "opensearch", "2");

編集

ルートフィードタグは次のようになります

<feed xml:lang="en-US" p1:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:p1="xmlns" xmlns="http://www.w3.org/2005/Atom">

@reddogが提案したように私のコードを変更した後、TotalResults要素は次のようになります

<totalResults xmlns="http://a9.com/-/spec/opensearch/1.1/">1000</totalResults>

フィードタグに名前空間を追加するコードは次のように見えます

feed.AttributeExtensions.Add(
    new XmlQualifiedName("opensearch", "xmlns"),
    @"http://a9.com/-/spec/opensearch/1.1/");

そして、TotalResults要素を追加するコードは、このようになりました

feed.ElementExtensions.Add("totalResults", @"http://a9.com/-/spec/opensearch/1.1/", "1000");
役に立ちましたか?

解決

どうでも。名前空間を誤って追加していることに気付きました。そのはず

feed.AttributeExtensions.Add(
   new XmlQualifiedName("opensearch", "http://www.w3.org/2000/xmlns/"),
   "http://a9.com/-/spec/opensearch/1.1/");

他のヒント

名前空間

デフォルトの名前空間は、親要素から継承されます。または、子供が使用する新しいエイリアスを定義することができます xmlns:alias= 構文または、デフォルトの名前空間を再定義して、要素(そしてもちろん子供です)に使用することができます。 xmlns= 構文。

最初の例:

<opensearch:totalResults>1000</opensearch:totalResults>

「OpenSearch」名前空間エイリアスは、おそらく別の名前空間で親要素によって定義されることが必要です。例えば:

<myRoot xmlms:opensearch="http://a9.com/-/spec/opensearch/1.1/">
    <opensearch:totalResults>1000</opensearch:totalResults>
</myRoot>

これは、「Myroot」要素が異なる名前空間にあることを意味します。つまり、デフォルトの名前(空白の名前空間を使用するか、自分の親によって定義されている)があります。

挿入

正しい名前空間で実際に要素を追加するには、エイリアス(「OpenSearch」)ではなく、名前空間自体を使用する必要があります。

したがって、新しい要素を追加するには、親ノードから名前空間をつかむ必要があります(または、それを知っているだけで、ハードコード化されています)。

例えば

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", 1000);

ただし、名前空間に与えられた特定のエイリアスを制限または制御できないことに注意してください。これを行うには、XMLシリアル化プロセスをある程度制御する必要があります...

より完全になるために。

設定されたチャネル要素の名前空間を次のように指定します。

feed.AttributeExtensions.Add(
  new XmlQualifiedName("opensearch", XNamespace.Xmlns.ToString()),
 "http://a9.com/-/spec/opensearch/1.1/");

そして、次のようにatoterresultsで名前空間を指定します

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", "1000");

それはあなたに与えます:

<opensearch:totalResults>1000</opensearch:totalResults>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top