4

間に違いはありますか

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

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

私は .NET で SyndicationFeed クラスを使用して Atom フィードを生成しています。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");
4

3 に答える 3

3

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

feed.AttributeExtensions.Add(
   new XmlQualifiedName("opensearch", "http://www.w3.org/2000/xmlns/"),
   "http://a9.com/-/spec/opensearch/1.1/");
于 2010-07-06T17:26:10.303 に答える
2

名前空間

デフォルトの名前空間は、親要素から継承されます。または、子が構文で使用する新しいエイリアスを定義する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 シリアル化プロセスをある程度制御する必要があります...

于 2010-07-01T18:44:14.937 に答える
0

より完全になるために。

次を使用して、チャネル要素の名前空間を指定します。

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

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

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

それはあなたに与えるでしょう:

<opensearch:totalResults>1000</opensearch:totalResults>
于 2016-08-29T12:18:12.603 に答える