asp:Repeaterとasp:XmlDataSourceを使用してsitemap.xmlファイルのコンテンツを表示しようとしています ( http://www.sitemaps.org/protocol.phpに定義されている標準を参照)。
<%#XPath("myNodeName")%>
問題は、ソース XML ドキュメントにカスタム名前空間 ( sitemap.xml形式を記述する標準で必要とされるようなもの) が含まれている場合、バインダーが機能しないことです。
Scott Hanselman は、カスタムのXmlNamespaceManagerを使用することを提案していますが、私はそれを正しい方法で初期化できないため<%#XPath("myNodeName")%>
、XML に値を表示しません。
XML から名前空間を削除すると、次のサンプルが正しく機能することに注意してください。
ソース XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://www.firebenchmarks.com/Modules/ContentItems/Public/ContentItems_View.aspx?RCICode=rci_001</loc>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>
<url>
<loc>http://www.firebenchmarks.com/Modules/ProductCustomer/Public/ProductCustomer_Descriptor.aspx</loc>
<changefreq>weekly</changefreq>
<priority>0.90</priority>
</url>
<url>
<loc>http://www.firebenchmarks.com/Modules/ContentItems/Public/ContentItems_View.aspx?RCICode=rci_633765577264687500</loc>
<changefreq>weekly</changefreq>
<priority>0.80</priority>
</url>
</urlset>
ASPX ( XPath バインダー内で使用されるNsManに注意してください):
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="XmlDataSource1">
<ItemTemplate>
<div>
Loc: <asp:TextBox ID="LocTB" runat="server" Text='<%#XPath("loc",NsMan)%>' />
Change frequency: <asp:TextBox ID="ChangeFrequencyTB" runat="server" Text='<%#XPath("changefreq",NsMan)%>' />
Priority: <asp:TextBox ID="PriorityTB" runat="server" Text='<%#XPath("priority",NsMan)%>' />
</div>
</ItemTemplate>
</asp:Repeater>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/SiteMap.xml" ></asp:XmlDataSource>
ASPX 内の XPath バインダーによって使用されるNsManプロパティを初期化するコード ビハインド(エラーが発生する可能性が最も高い場所):
public XmlNamespaceManager NsMan
{
get
{
if (_lazyNsMan == null)
{
NameTable table = new NameTable();
_lazyNsMan = new XmlNamespaceManager(table);
_lazyNsMan.AddNamespace("", "http://www.sitemaps.org/schemas/sitemap/0.9");
_lazyNsMan.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
_lazyNsMan.AddNamespace("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
}
return _lazyNsMan;
}
}