Skip to main content
 首页 » 编程设计

xml之在根元素中定义 xmlns 时如何解析 xpath

2025年05月04日182sharpest

以下是我尝试从中提取内容的 xml 示例:

<CPM  
  xmlns:nc="http://STUFF1"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns:jx="http://STUFF3"  
  xmlns:np="http://STUFF4"  
  xmlns:cj="http://STUFF5"  
  xsi:schemaLocation="http://STUFF6 STUFF7_STUFF8.xsd"  
  version="1.0"  
  key="KEYHERE"  
  xmlns="http://www.STUFF9.com"> 
 
  <Header> 
    <Init>1234</Init> 
    <Dest>MARS</Dest> 
    <Control>12345xxx</Control> 
  </Header> 
  <Body> 
  <PM> 
    <nc:Msg> 
        <np:EDSection> 
          <np:EPO> 
            <jx:ActivityDate>20180101</jx:ActivityDate> 

我正在尝试使用 XPATH 提取变量,如下所示:
<xsl:stylesheet 
    version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:ns0="pri:vate" 
    xmlns:nc="http://STUFF1" 
    xmlns:np="http://STUFF4" 
    xmlns:jx="http://STUFF3" 
    xmlns:ea="http://OTHERSTUFF" 
    xpath-default-namespace="http://www.STUFF9.com"> 
 
    <xsl:variable name="MYDATE" select="/CPM/Body[1]/PM[1]/nc:Msg[1]/np:EDSection[1]/np:EPO[1]/jx:ActivityDate[1]"/> 

问题是我有一个不喜欢 "xpath-default-namespace" 的 java 组件。我宁愿改变 xslt 而不是改变 java 组件。有没有其他方法可以从源 xml 中解析 xpath,该源 xml 定义 xmlns 与根元素中的 url 像这样?

请您参考如下方法:

替换 xpath-default-namespace="http://www.STUFF9.com"xmlns:s9="http://www.STUFF9.com"并将 XPath 表达式更改为

/s9:CPM/s9:Body[1]/s9:PM[1]/nc:Msg[1]/np:EDSection[1]/np:EPO[1]/jx:ActivityDate[1] 

删除默认命名空间后,您必须定义一个显式命名空间。在这里,我选择了 s9对于这种情况,但任何有效的 QName 都可以。