2

私はC#(.NET 2.0)を使用しています-実際にMONOを使用してMac OS Xで動作させようとしています(MONOが問題だとは思いません)

より大きな XmlDocument から XmlNode として取得された次の XML フラグメントがあるとします。

<subcategoryCode xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992">N100</subcategoryCode>
<subcategoryName xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992">DJ Headphones</subcategoryName>
<products xlink:href="tcm:5-33975" xlink:title="TESTONE Composition" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992" />
<products xlink:href="tcm:5-54295" xlink:title="HPX2000 Composition" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992" />
<products xlink:href="tcm:5-54296" xlink:title="HPX4000 Composition" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992" />

SelectSingleNode を使用して subcategoryName を取得しようとしていますが、単にできません。これは私のコードです:

XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace(String.Empty, "uuid:7E1158D2-DA42-4048-8513-66B4D48FA992");

XmlNodeList subcatList = doc.GetElementsByTagName("subcategories");

foreach (XmlNode subcat in subcatList) {
  html += "<div id=\"";
  html += subcat.SelectSingleNode("subcategoryName", nsm).InnerText; // <-- HERE IS MY PROBLEM!!!
  html += "\" class=\"product_thumbs_holder\" style=\"display: block; \">";
  html += "</div>";
  html += "<div style=\"clear:both\"></div>";
}

この問題はおそらく名前空間の処理方法に関連していると思いますが、これに何時間も悩まされています。同様の AddNamespace 宣言をたくさん試しましたが、うまくいきませんでした。

問題がどこにあるかへのポインタを提供するのに十分親切な人はいますか?

4

2 に答える 2

1

XPath はデフォルトの名前空間では機能しません。名前空間のプレフィックスを作成する必要があります。このコードは動作するはずです:

XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace("x", "uuid:7E1158D2-DA42-4048-8513-66B4D48FA992");

XmlNodeList subcatList = doc.GetElementsByTagName("subcategories");

foreach (XmlNode subcat in subcatList) {
    html += "<div id=\"";
    html += subcat.SelectSingleNode("x:subcategoryName", nsm).InnerText; // <-- HERE IS MY PROBLEM!!!
    html += "\" class=\"product_thumbs_holder\" style=\"display: block; \">";
    html += "</div>";
    html += "<div style=\"clear:both\"></div>";
}

注: de xml ドキュメントにプレフィックスを追加する必要はありません。関連する名前空間が一致する限り、xml ドキュメントのプレフィックスとコードのプレフィックスは一致する必要はありません。

于 2011-04-02T13:02:09.690 に答える
0

subcategoryName直接入手してみてください:

XmlNodeList subcatList = xmldoc.GetElementsByTagName( "subcategoryName" );
foreach( XmlNode subcat in subcatList )
{
    Console.WriteLine( subcat.InnerText );
}

subcategoryNameこれにより、xmlファイル内のすべての要素が取得されます。

于 2011-04-01T13:25:17.197 に答える