如何从现有文件中收集特定属性并合并到linux中的另一个文件

时间:2017-09-06 05:52:51

标签: xml xslt axis2

任何人都可以告诉我如何使用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>

的集合

1 个答案:

答案 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>