C# 使用更改名称空间前缀

C# 使用更改名称空间前缀,c#,sql-server,xpath,xquery,xml-namespaces,C#,Sql Server,Xpath,Xquery,Xml Namespaces,假设我使用相同的模式从两个不同的供应商处获得两个不同的xml文档。他们各自选择了不同的名称空间前缀。如何在C#和SQL Server中使用XPATH以通用方式查询“Foo”和“Bar”的值?为简洁起见,XML大致如下所示: 文件1 <a:Item xmlns:a="http://kakridge.com/schema">Foo</a:Item> Foo 文件2 <b:Item xmlns:b="http://kakridge.com/schema">Bar

假设我使用相同的模式从两个不同的供应商处获得两个不同的xml文档。他们各自选择了不同的名称空间前缀。如何在C#和SQL Server中使用XPATH以通用方式查询“Foo”和“Bar”的值?为简洁起见,XML大致如下所示:

文件1

<a:Item xmlns:a="http://kakridge.com/schema">Foo</a:Item>
Foo
文件2

<b:Item xmlns:b="http://kakridge.com/schema">Bar</a:Item>

我猜您正在查找
项的值,即
Foo
?如果元素的本地名称相同,则通配符应有助于您:

//*:Item/text()

XPath不关心源文档中出现的前缀,它只关心名称空间URI。如果前缀z绑定到名称空间,则//z:Item将在这两个文档中找到Item元素。

他在Microsoft world,Christian,因此我猜想他的XPath引擎不支持XPath 2.0语法。明白,但如果一个文档是//z:Item,另一个文档是//y:Item,您一般如何纠正这一点?这可能是一个实现细节,但我认为我忽略了前缀并定义了自己的前缀。正如您所说,只要URI匹配,我就不会认为这是个问题。不过,这需要一些研究。Christian的建议实际上在SQL Server中有效。顺便说一句,我几年前就喜欢上了你的XSLT书籍。@kakridge:前缀没关系,它们可能不同。只要它们绑定到同一名称空间。您可以使用第三个前缀,即这两个前缀的不同形式(例如
“t”
),并在XPath表达式中使用
t:Item
。我知道你可能不相信,试试看,我相信。我认为我目前所使用的工具大多存在缺陷。