Xml XSLT如何获取特定的组节点

Xml XSLT如何获取特定的组节点,xml,xslt,Xml,Xslt,我有这个xml,我只想获取'responseMessage'及其所有内容。我下面的xsl不起作用。当我移除requestMessage节点旁边的名称空间时,我得到了所需的输出,但情况不应该是这样,因为总是期望requestNode必须具有名称空间 XML输入 <?xml version="1.0" ?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/&quo

我有这个xml,我只想获取'responseMessage'及其所有内容。我下面的xsl不起作用。当我移除requestMessage节点旁边的名称空间时,我得到了所需的输出,但情况不应该是这样,因为总是期望requestNode必须具有名称空间

XML输入

 <?xml version="1.0" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body >
<requestMessage xmlns="http://xmlns.oracle.com/OUMWM/Message">
  <language>ENG</language>
  <deviceFlag>M2ER</deviceFlag>
  <badgeNumber>222</badgeNumber>
  <responseMessage>
    
    <response>
      
      <ertResponse>
        
        <verificationStatus>F</verificationStatus>
        <errorCode>22601</errorCode>
        <errorText>Badge Number 222 not found</errorText>
      </ertResponse>
    </response>
  </responseMessage>
</requestMessage>
</soap:Body >
</soap:Envelope>

英格
M2ER
222
F
22601
找不到徽章号码222
XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" />

    <!-- Pretty Print Output -->
    <xsl:strip-space elements="*"/>
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <!-- Remove namepsaces -->
    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>
    
    <!-- Construct response -->
    <xsl:template match="/*">
        <xsl:apply-templates select="//responseMessage"/>
    </xsl:template>

</xsl:stylesheet>

期望输出:

<responseMessage>
   <response>
      <ertResponse>
         <verificationStatus>F</verificationStatus>
         <errorCode>22601</errorCode>
         <errorText>Badge Number 222 not found</errorText>
      </ertResponse>
   </response>
</responseMessage>

F
22601
找不到徽章号码222

您应该声明名称空间“http://xmlns.oracle.com/OUMWM/Message“也就是说,像这样使用它:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:or="http://xmlns.oracle.com/OUMWM/Message"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
  <xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" />
  
  <!-- Pretty Print Output -->
  <xsl:strip-space elements="*"/>
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
  
  <!-- Remove namepsaces -->
  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
  </xsl:template>
  
  <!-- Construct response match on root-->
  <xsl:template match="/">
    <xsl:apply-templates select="*/*/or:requestMessage/or:responseMessage"/>
  </xsl:template>
    
</xsl:stylesheet>

您应该声明名称空间“http://xmlns.oracle.com/OUMWM/Message“也就是说,像这样使用它:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:or="http://xmlns.oracle.com/OUMWM/Message"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
  <xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" />
  
  <!-- Pretty Print Output -->
  <xsl:strip-space elements="*"/>
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
  
  <!-- Remove namepsaces -->
  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
  </xsl:template>
  
  <!-- Construct response match on root-->
  <xsl:template match="/">
    <xsl:apply-templates select="*/*/or:requestMessage/or:responseMessage"/>
  </xsl:template>
    
</xsl:stylesheet>