0

次のようなXMLをXMLElementにロードしています。

<related_id>
  <Item>
    <classification>Component</classification>
    <id></id>
    <keyed_name>glass</keyed_name> <!-- I want to get this InnerText -->
  </Item>
</related_id>
<source_id>968C45A47942454DA9B34245A9F72A8C</source_id>
<itemtype>5E9C5A12CC58413A8670CF4003C57848</itemtype>

内部テキストを取得すると:

string nameChildren = node.SelectSingleNode("/related_id/Item/keyed_name").InnerText;

文字列が空です!

私は何が間違っているのですか?

4

2 に答える 2

2

XPathを二重スラッシュで開始xmlnsし、ドキュメント全体でデフォルトの名前空間(属性)を確認します。

二重スラッシュは、それrelated_idが必ずしもファイルの最上位要素ではないことを意味します(これはあなたの例にはありません)。

デフォルトの名前空間が定義されていることを確認した場合は、「// x:related_id / x:Item / x:keyed_name」のようにxpathに反映し、この回答を参照する必要があります。

ただし、特定のレベルに同じ名前の要素が複数存在する可能性があり、考えられるすべての組み合わせを安全に処理できないように見えるため、XPathはまだ少し疑わしいものになります。XMLが非常に単純でない限り、ダブルスラッシュ自体はやや危険です。通常、XPathを単一のスラッシュで開始し、すべての要素を上から下にリストすることをお勧めします。

于 2012-05-09T15:09:25.353 に答える
1

デフォルトの名前空間であっても、名前空間を追加する必要があると思います。XmlNamespaceManager インスタンスを作成して、デフォルトの名前空間 ("ns" など) を追加してみてください。その後、xpath は次のようになります。

/ns:related_id/ns:Item/ns:keyed_name

私はここで考えます:C#でデフォルトの名前空間でXpathを使用することは、あなたが抱えていたのと同じ問題です。

于 2012-05-09T15:18:59.807 に答える