Xpath下标返回所有节点,而不仅是请求的节点

时间:2019-05-03 19:53:55

标签: xpath xslt-1.0

我正在尝试以下XPath:

//*[local-name()='SN102'][1]

使用XPathTester,我保存了场景 http://www.xpathtester.com/xpath/94ee37e08960247a7bf0619d38c52bee

并非每个HL1Loop都有一个SN102。
否则,我可以这样:

//*[local-name()='HLLoop1'][1]//*[local-name()='SN102']

我将示例数据简化为以下内容:

<ns0:X12_00401_856 xmlns:ns0="http://schemas.microsoft.com/BizTalk/EDI/X12/2006">
  <ns0:HLLoop1>
   <ns0:SN1>
      <SN102>1</SN102>
      <SN103>EA</SN103>
      <SN108>AC</SN108>
    </ns0:SN1>
  </ns0:HLLoop1>
  <ns0:HLLoop1>
    <ns0:SN1>
      <SN102>2</SN102>
      <SN103>EA</SN103>
      <SN108>AC</SN108>
    </ns0:SN1>
  </ns0:HLLoop1>
</ns0:X12_00401_856>

结果将返回所有节点,而不仅仅是第一个节点:

<?xml version="1.0" encoding="UTF-8"?>
<result>
<SN102>1</SN102>
<SN102>2</SN102>
</result>

如何仅选择第一个节点。看起来很简单,而且我确定我之前已经做过,但是今天不能工作。

我有一个“ Vendor Simulator”程序,该程序正在构建伪造的856数据发送回去,我想增加第一个数量只是为了强制执行一些错误处理逻辑。

1 个答案:

答案 0 :(得分:3)

只需选择整个节点列表的第一个元素

(//*[local-name()='SN102'])[1]

如果存在多个同名兄弟姐妹,则原始查询//*[local-name()='SN102'][1]将选择第一个SN102。