当前位置: 首页 > 知识库问答 >
问题:

XSLT如何获取特定组节点[重复]

郜振国
2023-03-14

我有这个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>

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>

共有1个答案

微生旻
2023-03-14

您应该声明命名空间“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>
 类似资料:
  • 有一个的s: 例如,如何获取key等于2的JSON元素?

  • 问题内容: 这是一项学术任务,我们将获得一个非常大的XML文件,其中包含数百个此类条目。对于每个项目,我们都应列出经理的ID,将项目添加到列表中的最后一个人员的人员ID以及当前的项目数。我已阅读并重新阅读了Oracle DOM API和各种Node API。我们正在使用JAVA,我一生都无法弄清楚如何搜索每个节点的各个“字段” 。以下是我们提供的数据示例。 我尝试做类似的事情: 并弄乱了这段代码一

  • 这是我的XML源: https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml 如何获取DKK(丹麦克朗)的最新汇率? 我不想使用foreach并检查货币是否为DKK... 我需要这样的东西: 知道怎么解决这个问题吗?

  • 我对编程很陌生,我想做一个程序,用不同的变量发出12张卡片,然后将每张完整的卡片存储在某个地方供以后使用: N=Number(卡片上的数字,可以从1到3) C=Color(卡片是什么颜色,绿色、蓝色或红色) F=Form(有3种形式:蛇、时钟和圆) R=Fill(可以是满的、半的或空的) 这是我到目前为止得到的:

  • 我有组织。w3c。dom。具有5个节点的节点列表。UUID生成的节点ID。随机UUID() Dom结构: 我需要获取属性id=“value5”的节点之后的所有节点。因此,结果应该包含id=value6和id=value7的节点。 我创建了流 那么,我可以用Java 8流API来实现这一点吗?

  • 我有一个SVG文档,其中包含类似于以下内容的节点: 我想做的只是选择