我有这个XML,需要更改格式
<?xml version="1.0"?>
<request type="POST">
<paths count="0"/>
<values count="71">
<timestamp>2017-01-18T21:38:22+01:00</timestamp>
<CampaignId>7f27a</CampaignId>
<CampaignCode>CMP-01084-C5R2J5</CampaignCode>
<Apple>
<a>Appel</a>
<b>Appel</b>
</Apple>
<Peach>
<a>Appel</a>
<b>Appel</b>
</Peach>
</values>
<files count="0"/>
<header>
<ipaddress>127.0.0.1</ipaddress>
<reqheader>thankyou</reqheader>
<referer/>
<![CDATA[Host= localhost:8083]]>
<cookies/>
</header>
</request>
**我只需要<values>
中的值并更改<apple>
中的<peach>
,<value>
等。像这样......
<soapenv:Envelope>
<soapenv:Header/>
<soapenv:Body>
<timestamp>2017-01-18T21:38:22+01:00</timestamp>
<CampaignId>7f27a</CampaignId>
<CampaignCode>CMP-01084-C5R2J5</CampaignCode>
<value>
<a>Appel</a>
<b>Appel</b>
</value>
<value>
<a>Appel</a>
<b>Appel</b>
</value>
</soapenv:Body>
</soapenv:Envelope>
花了8个多小时没有任何进展。
答案 0 :(得分:0)
这应该让你开始。有关更多详细信息,请参阅XSLT中的注释。
请注意,在输出中使用名称空间前缀soapenv
。要使输出为namespace well-formed,您需要将该前缀绑定到命名空间uri。
在我的XSLT中,我使用了uri http://schemas.xmlsoap.org/soap/envelope/
;如果你需要改变它。
XML输入(固定为well-formed(缺少</values>
))
<request type="POST">
<paths count="0"/>
<values count="71">
<timestamp>2017-01-18T21:38:22+01:00</timestamp>
<CampaignId>7f27a</CampaignId>
<CampaignCode>CMP-01084-C5R2J5</CampaignCode>
<Apple>
<a>Appel</a>
<b>Appel</b>
</Apple>
<Peach>
<a>Appel</a>
<b>Appel</b>
</Peach>
</values>
<files count="0"/>
<header>
<ipaddress>127.0.0.1</ipaddress>
<reqheader>thankyou</reqheader>
<referer/>
<![CDATA[Host= localhost:8083]]>
<cookies/>
</header>
</request>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<!--Copy any attribute or node() (element, text, comment, processing
instruction) without change. Override this with a more specific template
when needed.-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--Match the root element "request" and narrow the elements being processed
to children of the "values" element.-->
<xsl:template match="/request">
<soapenv:Envelope>
<soapenv:Header/>
<soapenv:Body>
<xsl:apply-templates select="values/*"/>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
<!--Change the name of elements to "value" except for timestamp,
CampaignId, and CampaignCode. Those should be left alone.-->
<xsl:template match="Apple|Peach">
<value>
<xsl:apply-templates/>
</value>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<timestamp>2017-01-18T21:38:22+01:00</timestamp>
<CampaignId>7f27a</CampaignId>
<CampaignCode>CMP-01084-C5R2J5</CampaignCode>
<value>
<a>Appel</a>
<b>Appel</b>
</value>
<value>
<a>Appel</a>
<b>Appel</b>
</value>
</soapenv:Body>
</soapenv:Envelope>
根据以下评论进行编辑:
不幸的是,这确实会改变每个拥有子节点的节点的名称 到&#39;价值&#39;,而不仅仅是定位目标。
我并不是100%明确表示您只想定位Apple
和Peach
(因为&#34;等等#34;)。