0

xml ファイルから属性を取得したいと考えています。属性は私のルートにあります。ここに例を見てください:

<PriceList ID="003" xmlns="BLA">
  <Items>
    <Item ID="AAK0435">
      <RetailPrice currency="EUR">1.6</RetailPrice>
    </Item>
    <Item ID="AAL0144">
      <RetailPrice currency="EUR">1470</RetailPrice>
    </Item>
  </Items>
</PriceList>

ルートの属性「ID」を取得したいと思います。私はこのようなことを試しましたが、彼は foreach ループに入りません。

XPathDocument xPriceDocument = new XPathDocument(priceList.FullName, XmlSpace.None);
                            XPathNavigator xPriceNavigator = xPriceDocument.CreateNavigator();

                            foreach (XPathNavigator xPriceListIdNavigator in xPriceNavigator.Select("PriceList"))
                            {
                                priceListId = xPriceListIdNavigator.GetAttribute("ID", "");
                            }
4

1 に答える 1

0

これは名前空間の問題です。

<PriceList ID="003" xmlns="BLA">

ルート要素のコードxmlns="BLA"は、URI「BLA」でデフォルトの名前空間を定義します。したがって、要素名に名前空間プレフィックスがない場合、この要素とその子孫はデフォルトの名前空間「BLA」に属します。名前空間プレフィックスがないため、要素がデフォルトの名前空間を使用している場合、要素が何らかの名前空間にあることを忘れがちです。デフォルトの名前空間は属性には適用されず、要素のみに適用されることに注意してください。

XPath は拡張された名前 (つまり、名前空間とローカル名で構成される名前のペア) で動作し、XPath 式の要素名に名前空間プレフィックスがない場合、どの名前空間にも属さない要素を選択します。XPath を使用して、ある名前空間に属する要素を選択するには、その名前空間 URI を宣言し、それをプレフィックスにバインドしてから、この prefix:element-name の組み合わせを XPath 式で使用する必要があります。

名前空間は、XML の基本的な概念です。名前空間に慣れていない場合は、時間をかけて学習し、理解してください。

于 2011-01-28T18:31:56.967 に答える