トップ回答者
rssの読み込み

質問
回答
-
OTAKAさん
質問の意味を勘違いしてしまい申し訳ありません。
format-default : メンバ "Item" は既に存在します。
のエラーは、ItemがXmlElement自体のプロパティとして既にあると言うことですよね。
直接解決に結びつかないかも知れませんが下記のような関数を考えてみました。
function Get-ElementName([Xml.XmlElement]$element)
{
for ( $i = 0; $i -lt $element.get_ChildNodes().Count; $i++ )
{
$element.get_ChildNodes().Item($i).Name
}
}
上記の Get-ElementNameという関数は、あるElementの下にあるElementの一覧を取得するというものです。
たとえば
Get-ElementName $xml.Address.Personal
とすると、$xml.Address.Personal の下にあるElement名をすべて表示します。Element名は"Item"であっても問題ありません。- 回答としてマーク OTAKA 2009年10月21日 8:50
すべての返信
-
c:\>$xml.rss.channel (ここでリターンキー)
上記の部分ですが
PS> $xml.rss.channel.Item
としてはどうでしょうか?
あとは
PS> $xml = [xml](New-Object System.Net.WebClient).DownloadString("マイクロソフト サイト新着情報.rss") PS> $xml.rss.channel.Item
のような方法でも取得出来ます。- 編集済み HIROsDotNetMVP 2009年10月14日 23:39 改行挿入
-
追記です。
channelの下に何があるかみたいとのことですが、Itemの下を見れば良いと思います。
Itemの下に何があるのかを確認するには
PS> $xml.rss.channel.Item | Get-Member
のように入力して見てください。メンバ一覧を見ることができます。
ちなみに、何件のデータがあるのかを確認するには Count プロパティを使用して
PS> $xml.rss.channel.Item.Count
と記述することができます。
またItemは配列ですので、要素番号を指定して、個々のデータにアクセスすることができます
PS> $xml.rss.channel.Item[0]
1件目のタイトルを取得したい場合には
PS> $xml.rss.channel.Item[0].Title
のようにします。タイトル以外も取得することが可能で、指定可能な項目は、Get-Memberコマンドレットで取得したメンバ一覧を参考にしてください。- 編集済み HIROsDotNetMVP 2009年10月14日 23:50 文章修正
-
[Reflection.Assembly]::LoadWithPartialName("System.ServiceModel.Web")
$f = New-Object "ServiceModel.Syndication.Rss20FeedFormatter"
$f.ReadFrom([Xml.XmlReader]::Create(どこかのURL))
$f.Feed.Items|% {$_.Title.Text}
う~ん、どうでしょう。.NET Framework 3.5のWCFでRSSのサポートがあります。
…PowerShellからは扱いづらいですね。 -
皆様、ご返事ありがとうございます。
Itemを見たいのではなくて、Channelの下のエレメントが何があるのかを見るために、
$xml.rss.channel(リターン)
をしたかったのですが、エラーがでてしまい困っていたのです。
極端にいえば、Channelの下にItemのエレメントがなければ、エラーが表示されないので
Itemエレメントの回避方法があればと思っております。
ちなみに、
<?xml version="1.0" encoding="utf-8"?>
<Address>
<Personal>
<Item>a</Item><Item>b</Item>
</Personal>
</Address>
をよみこんで、
$xml.Address.Personal(リターン)
format-default : メンバ "Item" は既に存在します。
となります。 -
OTAKAさん
質問の意味を勘違いしてしまい申し訳ありません。
format-default : メンバ "Item" は既に存在します。
のエラーは、ItemがXmlElement自体のプロパティとして既にあると言うことですよね。
直接解決に結びつかないかも知れませんが下記のような関数を考えてみました。
function Get-ElementName([Xml.XmlElement]$element)
{
for ( $i = 0; $i -lt $element.get_ChildNodes().Count; $i++ )
{
$element.get_ChildNodes().Item($i).Name
}
}
上記の Get-ElementNameという関数は、あるElementの下にあるElementの一覧を取得するというものです。
たとえば
Get-ElementName $xml.Address.Personal
とすると、$xml.Address.Personal の下にあるElement名をすべて表示します。Element名は"Item"であっても問題ありません。- 回答としてマーク OTAKA 2009年10月21日 8:50