XMLNODE:如何在我的 xml 中选择具有属性的此节点
Posted
技术标签:
【中文标题】XMLNODE:如何在我的 xml 中选择具有属性的此节点【英文标题】:XMLNODE: how can i select this node with attribute in my xml 【发布时间】:2014-03-24 13:24:56 【问题描述】:我有一个具有以下结构的 xml
<student>
<name fname="oliver">
</name>
<name fname="de">
</name>
<name fname="johnson">
</name>
</student>
我的代码是这样的:
//加载到名为 xmlrecord 的 xmldocument 之后
XmlNode row = xmlRecord.SelectSingleNode("/student");
student.fname = row.SelectSingleNode("name[fname]");
但它没有返回任何东西。请问选择 fname='johnson' 节点的最佳方法是什么?
【问题讨论】:
这对于 XML 来说是一种奇怪的结构;在三个单独的name
节点上将名称的每个部分作为其自己的属性似乎是多余的。名称部分是一个名称的属性。如果您可以控制此 XML,我会将其更改为 <student><name fname="..." mname="..." lname="..." /></student>
不,我无法控制 xml
【参考方案1】:
你想要第一个<name>
元素的fname
属性,所以你应该写:
student.fname = row.SelectSingleNode("name/@fname");
【讨论】:
这不起作用...它给出了 XPATH 错误:表达式必须评估为节点集。 它应该返回一个由单个项目组成的节点集:属性节点。如果 XPath 表达式中存在语法错误,可能会出现您所说的错误,也许您将我的答案包含在更大的表达式中? @oliverdejohnson,该表达式仍应与您编辑的标记一起使用,它将匹配三个属性节点但SelectSingleNode()
只会返回第一个。我怀疑您没有告诉我们整个故事,并且可能涉及名称空间。你能用你的 exact XML 标记更新你的问题吗?
重点是,在我的 xml 中,该节点不是第一个节点……它位于大约 60 个此类节点的中间
@oliverdejohnson,那么您将不得不使用另一个属性作为决定因素。除非你有你要找的元素的索引,在这种情况下你可以根据它的position()
来匹配它。以上是关于XMLNODE:如何在我的 xml 中选择具有属性的此节点的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows Phone 中检查 XMLNode 是不是存在
使用具有多个条件的 XMLNode(.Net) 获取 XML 节点