作者TeemingVoid (TeemingVoid)
看板C_Sharp
標題Re: [問題] XML節點搜尋問題
時間Wed Jul 24 15:38:26 2013
※ 引述《snk521 (哇哈哈)》之銘言:
: 我知道使用SelectSingleNode方法可以找出相對應的節點,可是裡面填入的Xpath
: 的表示方是一直不太清楚,下面是一個小小的例子:
: <Type name="MM">
: <Book name="Ring">
: <Author name="Mary">
: <price>100</price>
: </Author>
: <Author name="Jack">
: <price>200</price>
: </Author>
: </Book>
: <Book name="Road">
: <Author name="John">
: <price>300</price>
: </Author>
: <Author name="Juny">
: <price>400</price>
: </Author>
: </Book>
: </Type>
: 問題1.假設我要找出Book name="Ring"這個節點,Xpath該怎麼寫?
node = objXmlDocument.SelectSingleNode("/Type/Book[@name='Ring']");
1. 中括號內部寫明條件,本例是說 Book 元素有 name 屬性而且屬性值等於 Ring。
2. 要查屬性的話,請加上 @ at符號。
3. 字串值 Ring 用 ' 單引號包夾。
: 問題2.假設我要找出Author name="Mary"這個節點,Xpath又該怎麼寫?
如果按照字面意思:
node = objXmlDocument.SelectSingleNode("/Type/Book/Author[@name='Mary']");
如果要 Author name="Mary" 的那本書:
node = objXmlDocument.SelectSingleNode("/Type/Book[Author[@name='Mary']]");
: 問題3.要是我想找出 <price>100的這個節點,Xpath又該怎麼找?
node = objXmlDocument.SelectSingleNode("/Type/Book/Author[price=400]/price");
或者:
node = objXmlDocument.SelectSingleNode("/Type/Book/Author/price[.=400]");
※ 編輯: TeemingVoid 來自: 111.252.127.171 (07/24 15:59)
→ TeemingVoid:對了,附帶一提,XML有分大小寫,所以,你那份XML文件 07/24 16:07
→ TeemingVoid:的 schema 如果是你可以作主的話,最好統一使用 07/24 16:08
→ TeemingVoid:Pascal命名法或者 camel 命名法,否則,一下子第一個 07/24 16:08
→ TeemingVoid:字母大寫,一下子又全小寫,很容易寫錯。 07/24 16:08
推 snk521:感謝T大熱心的回覆,順便問一下怎麼宣告XmlElement為陣列? 07/24 20:04
→ TeemingVoid:就跟一般陣列一樣啊!? 07/24 23:09
→ TeemingVoid:XmlElement[] Books = new XmlElement[size]; 07/24 23:09
→ TeemingVoid:只是XmlElement是用XmlDocument.CreateElement()建構 07/24 23:11