2012-01-11 10 views
1

は私のxmlファイルは、私が本の「タイトル」を表示する必要がxmlファイルからノードを選択する方法は?以下

<?xml version="1.0" encoding="UTF-8"?> 
<bookstore> 

<book category="cooking"> 
<book> 
    <bookID>1111</bookID> 
</book> 
<title lang="en">Everyday Italian</title> 
<author>Giada De Laurentiis</author> 
<year>2005</year> 
<price>30.00</price> 
</book> 

<book category="children"> 
<book> 
    <bookID>54655</bookID> 
</book> 
<title lang="en">Harry Potter</title> 
<author>J K. Rowling</author> 
<year>2005</year> 
<price>29.99</price> 
</book> 

<book category="web"> 
<book> 
    <bookID>5556</bookID> 
</book> 
<title lang="en">XQuery Kick Start</title> 
<author>James McGovern</author> 
<author>Per Bothner</author> 
<author>Kurt Cagle</author> 
<author>James Linn</author> 
<author>Vaidyanathan Nagarajan</author> 
<year>2003</year> 
<price>49.99</price> 
</book> 

<book category="web" cover="paperback"> 
<book> 
    <bookID>1111</bookID> 
</book> 
<title lang="en">Learning XML</title> 
<author>Erik T. Ray</author> 
<year>2003</year> 
<price>39.95</price> 
</book> 

</bookstore> 

です。 ASPコードの下

は、私はエラーに

コード表示を取得し、この原因で<book>

のサブノードを示すデータ

<% 
'' #Load XML 

Set xml= Server.CreateObject("Msxml2.DOMDocument.3.0") 
    xml.async = False 
    xml.load (Server.MapPath("test.xml")) 

    if xml.parseError.errorcode<>0 then 
    response.write "error handling code" &xml.parseError.errorcode 
    else 

     Set objLst= xml.getElementsByTagName("bookstore").item(0).getElementsByTagName("book") 
     TotalBooks = (objLst.Length)-1 
     For i=0 to eval(TotalBooks) 
      response.write xml.getElementsByTagName("bookstore").item(0).getElementsByTagName("book").item(i).getElementsByTagName("title").item(0).text&"<br/>" 
     Next 

    end if 

%> 

しかし、「objLst.length」を表示するために使用されるのみ拳のノードの本のタイトルのみ。第2のノードには向かない。私はそれを修正hw?

i need out put like below 

Everyday Italian 

Harry Potter 

XQuery Kick Start 

Learning XML 

答えて

-1

これは、最も簡単なものです。System.Xml.Linqを使用してください。

XElementにロードし、Linqを使用してそれを照会します。

XDocument test = XDocument.Load(xmlFilename); // load from string if you want 
XElement cooking = test.Element("bookstore") 
         .Descendants("book") 
         .Where(e => e.Attribute("category" => "cooking") 
         .FirstOrDefault(); 
+0

を使用することができます示唆したように、あなたはSystem.Xml.Linqを使用できない場合は-1これはASP-クラシック質問です、XDocument/LINQのが利用できません。 – AnthonyWJones

+0

申し訳ありませんが、@ CCBlackburn'sはこのトリックを行う必要があります。 – sonjz

+0

メモ:XPathで覚えている奇妙なことがあります。 selectNodes(リストを取得)とselectSingleNode(最初の出現) xml.documentElement.selectSingleNode( "// book [category = 'cooking']」) – sonjz

2

@sonjzは、あなたがSelectNodesとXPath式

set nodes = xml.documentElement.selectNodes("//book/title") 

for each node in nodes 
    response.write node.text & "<br/>" 
next 
関連する問題