任何人都可以告诉我如何使用xslt读取xml属性进行文件比较。
旧xml中有多个setcookie
标签,我需要全部读取并更新到新的xml。
$_COOKIE
基本上我想阅读<transportReceiver>
标签并制作一个集合并附加到新的axis2.xml文件。为此,我正在使用xslt。我为此创建了一个xsl文件。
<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8080</parameter>
</transportReceiver>
我需要一些帮助来收集<transportReceiver>
答案 0 :(得分:1)
以下是如何实现这一目标的方法。我们假设First.xml
文件包含<transportReceiver>
节点以及其他节点。
First.xml
<root>
<otherNode>
<otherNodeValue>XXXX</otherNodeValue>
</otherNode>
<someOtherNode>
<someOtherNodeValue>YYYY</someOtherNodeValue>
</someOtherNode>
<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8080</parameter>
</transportReceiver>
</root>
Second.xml
是需要将<transportReceiver>
节点与其自己的现有节点合并的节点。
Second.xml
<rootNode>
<axisNode>
<axisValue>AXIS</axisValue>
</axisNode>
</rootNode>
应用于Second.xml
时,下面的XSLT会生成所需的输出。
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="fileName" select="document('First.xml')" />
<!-- identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="rootNode">
<xsl:copy>
<!-- copy required node from First.xml -->
<xsl:apply-templates select="$fileName/root/transportReceiver" />
<!-- retain existing nodes of Second.xml as is -->
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<rootNode>
<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8080</parameter>
</transportReceiver>
<axisNode>
<axisValue>AXIS</axisValue>
</axisNode>
</rootNode>