私は入力済みのRSSフィードを持っています。属性を削除して、再度、C#で要素を追加することなく、<itunes:subtitle>
は名前空間として追加されると言うと要素が<subtitle>
既存の名前空間プレフィックスを変更せずに既存のRSSに新しいRSS要素を追加
所望の出力です:
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd/" version="2.0">
<channel>
<title>channelTitle</title>
<itunes:subtitle>subtitle_description</itunes:subtitle>
<item>
<title>item1</title>
<itunes:subtitle>A short description</itunes:subtitle>
</item>
</channel>
</rss>
入力XML:
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd/" version="2.0">
<channel>
<item>
<title>item1</title>
<itunes:subtitle>A short description</itunes:subtitle>
</item>
</channel>
</rss>
どのようにすることができますC#で別の要素を追加するだけでなく、既存の名前空間:要素を維持しますか?
を参照してくださいコード:そうでない場合は、無効なXMLを処理しています、私は明示的にコード内で再び名前空間を追加することだ(と名前空間は、入力XMLに存在しなければならない。
XNamespace itunes = "http://www.itunes.com/dtds/podcast-1.0.dtd/";
string rssFeed = "<rss xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" version=\"2.0\"><channel><item><title>item1</title><itunes:subtitle>A short description</itunes:subtitle></item></channel></rss>";
XDocument XMLDoc = XDocument.Parse(rssFeed);
XMLDoc.Root.RemoveAttributes();
XMLDoc.Root.Add(new XAttribute(XNamespace.Xmlns + "itunes", itunes.NamespaceName));
//Without adding the namespace attribute explicitly, the xmlns attribute is added instead to <subtitle> instead of <itunes:subtitle> :
XMLDoc.Element("rss").Element("channel").AddFirst(
new XElement("title", "channelTitle"),
new XElement(itunes + "subtitle", "subtitle_description")
);
が正しく追加されます しかし、今、入力XMLに変更され、出力:
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd/">
<channel>
<title>channelTitle</title>
<itunes:subtitle>subtitle_description</itunes:subtitle>
<item>
<title>item1</title>
<subtitle xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd">A short description</subtitle>
</item>
</channel>
</rss>
Approach2:
XNamespace itunes = "http://www.itunes.com/dtds/podcast-1.0.dtd/";
string rssFeed = "<rss xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" version=\"2.0\"><channel><item><title>item1</title><itunes:subtitle>A short description</itunes:subtitle></item></channel></rss>";
XDocument XMLDoc = XDocument.Parse(rssFeed);
XMLDoc.Element("rss").Element("channel").AddFirst(
new XElement("title", "channelTitle"),
new XElement(itunes + "subtitle", "subtitle_description")
);
Console.WriteLine(XMLDoc);
出力:私の質問は、私は答えとして数行のコードを取得するには本当に長い願っていれるよう、確かな単純なものがなければならない
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
<channel>
<title>channelTitle</title>
<subtitle xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd/">subtitle_description</subtitle>
<item>
<title>item1</title>
<itunes:subtitle>A short description</itunes:subtitle>
</item>
</channel>
</rss>
同じくらい私が欠けている:)
私は既存のXMLの名前空間の使用に迷って、代わりに新しい名前空間を作成しようとしました。それが問題でした。 XNamespace itunes = XMLDoc.Root.GetNamespaceOfPrefix( "itunes"); –