Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Biztalk XPath格式背后的推理_Xpath_Biztalk - Fatal编程技术网

Biztalk XPath格式背后的推理

Biztalk XPath格式背后的推理,xpath,biztalk,Xpath,Biztalk,当您构建BRE词汇表并需要获取节点或值的XPath时,模式属性是一个方便的来源,但是这些XPath的格式有点不一致 比如 <ns0:rootnode xmlns:ns0="http://mynamespace.org"> <ns0:childnode></ns0:childnode> </ns0:rootnode> 据我所知,对于每个节点,它匹配任何(*),那么在条件[]中扩展条件以缩小节点名和名称空间 我无论如何都不是xpath大师,但我猜

当您构建BRE词汇表并需要获取节点或值的XPath时,模式属性是一个方便的来源,但是这些XPath的格式有点不一致

比如

<ns0:rootnode xmlns:ns0="http://mynamespace.org">
  <ns0:childnode></ns0:childnode>
</ns0:rootnode>
据我所知,对于每个节点,它匹配任何(*),那么在条件[]中扩展条件以缩小节点名和名称空间

我无论如何都不是xpath大师,但我猜这是对名称空间前缀更改的某种保护

但即使如此,为什么不缩短(和更干净)

我猜这是对名称空间前缀的某种保护 改变

实际上,这是BizTalk中使用的Xpath格式。这允许解析文档,而无需将名称空间加载到文档中。此外,
local-name()
的使用不包括名称空间前缀(仅
childnode
),而
name()
也包括名称空间别名(例如
ns0:childnode

因此,
XPath

 /*[local-name()='rootnode' and namespace-uri()='http://mynamespace.org']
   /*[local-name()='childnode' and namespace-uri()='http://mynamespace.org']
可用于导航以下xml:

<rootnode xmlns='http://mynamespace.org'>
  <childnode xmlns='http://mynamespace.org'>
    .. 
  </childnode>
</rootnode>
表示“使用元素名
rootnode
和名称空间
http://mynamespace.org
”,等等,功能如下

不幸的是:

/rootnode[namespace-uri()='http://mynamespace.org']
   /childnode[namespace-uri()='http://mynamespace.org']
将不起作用,因为没有命名空间就无法计算
/rootnode

快捷方式是可能的,但不明智,例如,如果您坚持xml文档中所有名称空间中只有一个
rootnode
childnode
元素,则可以省略
namespace-uri()
,即

 /*[local-name()='rootnode']/*[local-name()='childnode']
但是,如果您的文档看起来是这样的,则会出现这种情况:

<rootnode xmlns='http://mynamespace.org'>
  <childnode xmlns='http://mynamespace.org'>
  <childnode xmlns='http://anothernamespacehere'>
TL;DR

在我看来,在大多数情况下,命名空间无关的Xpath导航将在BizTalk中为您生成,您可以放心地将它们放在一边。尽管他们滔滔不绝,但过一会儿你就会习惯他们,不会真的被他们打扰

我猜这是对名称空间前缀的某种保护 改变

实际上,这是BizTalk中使用的Xpath格式。这允许解析文档,而无需将名称空间加载到文档中。此外,
local-name()
的使用不包括名称空间前缀(仅
childnode
),而
name()
也包括名称空间别名(例如
ns0:childnode

因此,
XPath

 /*[local-name()='rootnode' and namespace-uri()='http://mynamespace.org']
   /*[local-name()='childnode' and namespace-uri()='http://mynamespace.org']
可用于导航以下xml:

<rootnode xmlns='http://mynamespace.org'>
  <childnode xmlns='http://mynamespace.org'>
    .. 
  </childnode>
</rootnode>
表示“使用元素名
rootnode
和名称空间
http://mynamespace.org
”,等等,功能如下

不幸的是:

/rootnode[namespace-uri()='http://mynamespace.org']
   /childnode[namespace-uri()='http://mynamespace.org']
将不起作用,因为没有命名空间就无法计算
/rootnode

快捷方式是可能的,但不明智,例如,如果您坚持xml文档中所有名称空间中只有一个
rootnode
childnode
元素,则可以省略
namespace-uri()
,即

 /*[local-name()='rootnode']/*[local-name()='childnode']
但是,如果您的文档看起来是这样的,则会出现这种情况:

<rootnode xmlns='http://mynamespace.org'>
  <childnode xmlns='http://mynamespace.org'>
  <childnode xmlns='http://anothernamespacehere'>
TL;DR


在我看来,在大多数情况下,命名空间无关的Xpath导航将在BizTalk中为您生成,您可以放心地将它们放在一边。尽管他们唠叨不休,但过一会儿你就会习惯他们,不会真的为他们烦恼。

是的,这很清楚。谢谢-知道这样做的原因就不会那么麻烦了。只需补充一点,如果可读性是一个问题,并且您不希望出现名称冲突(我从来没有遇到过),您可以删除名称空间谓词,它也会工作。是的,这很清楚。谢谢-知道这样做的原因就不那么麻烦了。只需补充一点,如果可读性是一个问题,并且您不希望出现名称冲突(我从未遇到过),您可以删除名称空间谓词,它也会起到同样的作用。