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,我会将其更改为 &lt;student&gt;&lt;name fname="..." mname="..." lname="..." /&gt;&lt;/student&gt; 不,我无法控制 xml 【参考方案1】:

你想要第一个&lt;name&gt;元素的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 节点

如何在 C# 中使用 XmlDocument 和 XmlNode 修改现有 XML 文件

如何检查多个 XMLNode 属性的空值?

如何序列化 XMLNode 类型的属性

如何通过对 XmlSerializer.Serialize 的调用创建 XmlNode?