-1

タグ名のノードを選択できません。

Smaple XML:

<author-group id="a001">
<author id="aa001">
  <given-name id="g001">Name</given-name>
  <surname id="s001">Name</surname>
</author>
<author id="aa002">
 <given-name id="g002">Name</given-name>
 <surname id="s002">Name</surname>
</author>
<author id="aa003">
   <given-name id="g003">Name</given-name>
   <surname id="s003">Name</surname>
</author>
</author-group>

試したコード:

Dim xDom As New Xml.XmlDocument
xDom .LoadXml(XMLStr)
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim NodeCount as Integer =Lst.Count()

カウントはゼロになります。

4

3 に答える 3

4

このxmlns属性は、要素が出現する要素の下のすべてのコンテンツに適用される、いわゆるデフォルトの名前空間を定義します。ただし、XPathは名前空間を指定していませんauthor。つまり、どの名前空間にも存在しない要素のみが検索されます。したがって、間違った要素名を効果的に探しています。

名前空間を使用するXPathクエリにXmlNamespaceManagerは、名前空間プレフィックスの名前空間へのマッピングを提供するが必要です。次のように、XPathでデフォルトの名前空間を使用することもできます。

次のスニペットでデフォルトの名前空間URIを置き換え、ドキュメントxxxを読み込んxDomだ後にこれを実行します。

'Create an XmlNamespaceManager for resolving namespaces.
Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(xDom.NameTable)
nsmgr.AddNamespace(String.Empty, "xxx")

Dim nodeList as XmlNodeList 
Dim root as XmlElement = xDom.DocumentElement
nodeList = root.SelectNodes("//author", nsmgr)
于 2012-07-04T11:27:28.237 に答える
0

コードを新しいプロジェクトにコピーしましたが、正しく機能しました。これが私のテストプロジェクトのコードです。

Dim XMLStr As String = "<author-group id=""a001""><author id=""aa001"">  <given-name id=""g001"">Name</given-name>  <surname id=""s001"">Name</surname></author><author id=""aa002""> <given-name id=""g002"">Name</given-name> <surname id=""s002"">Name</surname></author><author id=""aa003"">   <given-name id=""g003"">Name</given-name>   <surname id=""s003"">Name</surname></author></author-group>"
Dim xDom As New Xml.XmlDocument
xDom.LoadXml(XMLStr)
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim Cnt As Integer = Lst.Count()

したがって、エラーはコード内の別の場所にある必要があります。

于 2012-07-04T10:06:47.287 に答える
0

これを試してください(xml DTDを追加し、XDocumentを使用します)。

Dim x As XDocument = <?xml version="1.0" encoding="utf-8"?>
                             <author-group id="a001">
                                 <author id="aa001">
                                     <given-name id="g001">Name</given-name>
                                     <surname id="s001">Name</surname>
                                 </author>
                                 <author id="aa002">
                                     <given-name id="g002">Name</given-name>
                                     <surname id="s002">Name</surname>
                                 </author>
                                 <author id="aa003">
                                     <given-name id="g003">Name</given-name>
                                     <surname id="s003">Name</surname>
                                 </author>
                             </author-group>

Dim xDom As New XmlDocument
xDom.LoadXml(x.ToString())
Dim Lst As XmlNodeList = xDom.SelectNodes("//author")
Dim Cnt As Integer = Lst.Count()
于 2012-07-04T11:24:08.547 に答える