需要有关在Soap XML中替换字符串的帮助

时间:2015-08-12 21:21:37

标签: xml xslt soap

我有一个SOAP XML

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <hari:getRatingPlugDetailsResponse xmlns:hari="hari.cfm">
      <return>
        <jsonData>{"ratingPlugId":"ratingPlug01","partNumber":"1","keyword":"zazvgtrvdf","unitOfMeasure":"cm","upq":"1","unitListPrice":"100","currency":"currency1","leadTime":"leadTime1","validityTime":"validityTime1","rfqQuotation":"rfqQuotation1","stock":"stock1"}</jsonData>
        <httpCode>200</httpCode>
      </return>
    </hari:getRatingPlugDetailsResponse>
  </soap:Body>
</soap:Envelope>

我想在服务器操作中动态替换XML中的字符串。 我通过更改在我的服务器中不起作用的名称空间URI来尝试它。 我只需要一个XSLT解决方案来检查&#34; hari.cfm&#34;并将其替换为&#34; http://hari.cfm&#34;

先谢谢

2 个答案:

答案 0 :(得分:0)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:hari="hari.cfm">

  <xsl:output method="xml" indent="yes" />

  <xsl:template match="soap:*">
    <xsl:element name="soap:{local-name()}" namespace="http://schemas.xmlsoap.org/soap/envelope/">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

  <xsl:template match="hari:*">
    <xsl:element name="hari:{local-name()}" namespace="http://hari.cfm">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{local-name(.)}">
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

  

我只需要一个XSLT解决方案来检查&#34; hari.cfm&#34;并替换它   使用&#34; http://hari.cfm&#34;

在您的XML中,"hari.cfm"不仅仅是一个字符串 - 它是名称空间URI 。因此,它不能被字符串操作取代。

您真正要求的是将节点从一个名称空间移动到另一个名称空间。在您的情况下,这可以通过以下方式完成:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:old-hari="hari.cfm">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="*">
    <xsl:element name="{name()}" namespace="{namespace-uri(.)}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

<xsl:template match="old-hari:*">
    <xsl:element name="hari:{local-name()}" namespace="http://hari.cfm">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>