从xml中提取节点

时间:2012-05-23 00:36:17

标签: xslt-1.0

我正在努力使用XSLT1.0来实现非常简单的功能,所以请耐心等待。

这是我原来的XML:

<适配器响应>
 <状态>&成功LT; /状态>
 <数据>
  <库存>
   <服务器>
    ....
    ....
   < /服务器和GT;
   <路由器>
    ....
    ....
   < /路由器>
   ...
   ...
  < /库存>
< /适配器响应>

它是一个包含大量数据的庞大XML。我只想删除与适配器相关的标签,并将库存数据与原始标签保持一致。所以最终的XML将是:

<库存>
   <服务器>
    ....
    ....
   < /服务器和GT;
   <路由器>
    ....
    ....
   < /路由器>
   ...
   ...
  < /库存>

请帮忙!

此致 拉胡

1 个答案:

答案 0 :(得分:1)

提供的"草图" XML文档的格式不正确,因此我对文档的重建可能不是问题中的意图:

<adapter-response>
    <status>success</status>
    <data>
        <inventory>
            <servers>
....
....
            </servers>
            <routers>
....
....
            </routers>
...
...
        </inventory>
    </data>
</adapter-response>

此转化:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*[contains(name(), 'adapter')]">
  <xsl:apply-templates/>
 </xsl:template>
</xsl:stylesheet>

仅复制到输出元素,其名称不包含字符串"adapter"。上述文件的结果是

<status>success</status>
<data>
   <inventory>
      <servers>
....
....
            </servers>
      <routers>
....
....
            </routers>
...
...
        </inventory>
</data>