给定 XElement - 按节点名称查找节点文本

Posted

技术标签:

【中文标题】给定 XElement - 按节点名称查找节点文本【英文标题】:Given XElement - Find node text by node name 【发布时间】:2012-04-18 06:48:14 【问题描述】:

我已将 XML 文档加载到 XElement

看起来有点像这样:

<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-03-14T05:31:16" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-AU">
<my:header>
    <my:item1></my:item1>
    <my:item2></my:item2>
    <my:item3></my:item3>
</my:header>
<my:header2>
    <my:title1>Blah</my:title1>
    <my:title2>Zlib</my:title2>
    <my:title3>Bleep</my:title3>
</my:header2>

我想要做的就是在给定输入“节点名称”(即“title1”、“title2”、“title3”)的情况下搜索“节点文本”(即“Blah”、“Zlib”或“Bleep”) )

我尝试了xeData.Attribute("title1")xeData.Element("title1") 以及各种linq 语句,但均未成功。

我该怎么做?

【问题讨论】:

【参考方案1】:

您需要考虑“title”元素的命名空间。试试这个:

string titleText = xeData.Element(XName.Get("title1", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-03-14T05:31:16")).Value;

我在这里假设 xeData 是“标题”元素——如果不是,您必须先弄清楚如何选择它。

【讨论】:

【参考方案2】:

如果您想在命名空间中查找或创建节点,使用作为 LINQ to XML 一部分的XNamespace 对象会有所帮助。 这是一个例子:

    XElement myFields = XElement.Load("../../XMLFile3.xml");
    XNamespace my = myFields.GetNamespaceOfPrefix("my");
    Console.WriteLine(myFields.Element(my + "header2").Element(my + "title1").Value);

另见http://msdn.microsoft.com/en-us/library/bb387042.aspx。

【讨论】:

以上是关于给定 XElement - 按节点名称查找节点文本的主要内容,如果未能解决你的问题,请参考以下文章

对 XElement 的子节点的索引访问

XSL 节点集:不按名称查找子元素

Qt 按名称查找子节点

XElement - 无法捕获下一个节点

XElement 怎么在指定节点添加子节点

属性名称在Xelement的setattribute属性中重叠