我有一个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;
先谢谢
答案 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>