作者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)
1F:→ TeemingVoid:对了,附带一提,XML有分大小写,所以,你那份XML文件 07/24 16:07
2F:→ TeemingVoid:的 schema 如果是你可以作主的话,最好统一使用 07/24 16:08
3F:→ TeemingVoid:Pascal命名法或者 camel 命名法,否则,一下子第一个 07/24 16:08
4F:→ TeemingVoid:字母大写,一下子又全小写,很容易写错。 07/24 16:08
5F:推 snk521:感谢T大热心的回覆,顺便问一下怎麽宣告XmlElement为阵列? 07/24 20:04
6F:→ TeemingVoid:就跟一般阵列一样啊!? 07/24 23:09
7F:→ TeemingVoid:XmlElement[] Books = new XmlElement[size]; 07/24 23:09
8F:→ TeemingVoid:只是XmlElement是用XmlDocument.CreateElement()建构 07/24 23:11