【问题标题】:XSLT - Add new element and valueXSLT - 添加新元素和值
【发布时间】:2022-01-01 14:09:13
【问题描述】:

我有这个 XML,我想添加一个带有硬编码值的新元素名称。我怎样才能实现它?

XML:

<m2:InvokeWebService xmlns:m2="http://www.w3.org/2001/XMLSchema-instance">
   <m2:request>
      <m2:action>ADD</m2:action>      
      <m2:commonDetails>
         <m2:needSupport>Y</m2:needSupport>
      </m2:commonDetails>
      <m2:custDetails>
         <m2:name>Tony,Hawk</m2:name>
         <m2:accountNumber>23232423566</m2:accountNumber>
         <m2:sensitiveCustomer>Y</m2:sensitiveCustomer>         
      </m2:custDetails>      
   </m2:request>
</m2:InvokeWebService>

期望的输出

<?xml version="1.0" encoding="UTF-8"?><m2:InvokeWebService xmlns:m2="http://www.w3.org/2001/XMLSchema-instance">
   <m2:request>
      <m2:action>ADD</m2:action>      
      <m2:commonDetails>
         <m2:needSupport>Y</m2:needSupport>
      </m2:commonDetails>
      <m2:overrideScriptName>NewScript</m2:overrideScriptName>
      <m2:custDetails>
         <m2:name>Tony,Hawk</m2:name>
         <m2:accountNumber>23232423566</m2:accountNumber>
         <m2:sensitiveCustomer>Y</m2:sensitiveCustomer>         
      </m2:custDetails>      
   </m2:request>
</m2:InvokeWebService>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:m2="http://www.w3.org/2001/XMLSchema-instance">
    <!--<xsl:output method="xml" encoding="utf-8" indent="yes"/>-->
    <!-- Identity template : copy all text nodes, elements and attributes -->   
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>  
    <m2:overrideScriptName>CM-PrMtActMg</m2:overrideScriptName>      
</xsl:stylesheet>

要在 custDetails 之前添加的新元素

<m2:overrideScriptName>NewScript</m2:overrideScriptName>

【问题讨论】:

  • 在询问 XSLT 问题时,您需要提供 minimal reproducible example: (1) 输入 XML。 (2) 你的逻辑,以及试图实现它的 XSLT。 (3) 所需的输出,基于上面#1 中的示例 XML。 (4) XSLT 处理器及其对 XSLT 标准的遵从性:1.0、2.0 或 3.0。
  • 添加了我尝试实现的 XSLT,抱歉我是 XSLT 新手

标签: xml xslt


【解决方案1】:

请尝试以下解决方案。

它使用所谓的身份转换模式。

输入 XML

<m2:InvokeWebService xmlns:m2="http://www.w3.org/2001/XMLSchema-instance">
    <m2:request>
        <m2:action>ADD</m2:action>
        <m2:commonDetails>
            <m2:needSupport>Y</m2:needSupport>
        </m2:commonDetails>
        <m2:custDetails>
            <m2:name>Tony,Hawk</m2:name>
            <m2:accountNumber>23232423566</m2:accountNumber>
            <m2:sensitiveCustomer>Y</m2:sensitiveCustomer>
        </m2:custDetails>
    </m2:request>
</m2:InvokeWebService>

XSLT 1.0

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m2="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="m2:custDetails">
        <m2:overrideScriptName>NewScript</m2:overrideScriptName>
        <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

输出 XML

<?xml version='1.0' encoding='utf-8' ?>
<m2:InvokeWebService xmlns:m2="http://www.w3.org/2001/XMLSchema-instance">
  <m2:request>
    <m2:action>ADD</m2:action>
    <m2:commonDetails>
      <m2:needSupport>Y</m2:needSupport>
    </m2:commonDetails>
    <m2:overrideScriptName>NewScript</m2:overrideScriptName>
    <m2:custDetails>
      <m2:name>Tony,Hawk</m2:name>
      <m2:accountNumber>23232423566</m2:accountNumber>
      <m2:sensitiveCustomer>Y</m2:sensitiveCustomer>
    </m2:custDetails>
  </m2:request>
</m2:InvokeWebService>

【讨论】:

  • @TiJ,如果建议的解决方案对您有用,请不要忘记将其标记为答案。
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
相关资源
最近更新 更多