我的xslt以下。用于规范化整个xml。
normalize_xslt ='''
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:template match="*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>'''
它能够正确地规范化xml,但是说我有一个如下的XML:
xml = \
"""
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/17.4D0/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:5c4d99db-5b2b-4c88-8f69-8fe1d2c29bfe">
<output>
CPU Name Time(ms)
85% Idle 4801438332
13% Threads 782332270
0% ISR 10860088
0% Level 1 10854137
0% Level 2 5949
Last Long Running Thread Event time 200 ms
CPU Name Time(ms) Count
Top Thread:
pid = 99
name = LU Background Service
time = 266630752 ms
cpu = 4%
</output>
</rpc-reply>
"""
我想跳过xml元素为<output>
的xml
我的xslt需要更改什么?
答案 0 :(得分:1)
添加通过
复制元素的模板<xsl:template match="df:output" xmlns:df="urn:ietf:params:xml:ns:netconf:base:1.0">
<xsl:copy-of select="."/>
</xsl:template>
。如果要“标准化”名称并删除名称空间,请使用
<xsl:template match="df:output" xmlns:df="urn:ietf:params:xml:ns:netconf:base:1.0">
<xsl:element name="{local-name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
如果名称空间可以更改,但已知根元素本地名称rpc-reply
和output
名称表示您不想更改任何内容,那么您还可以添加例如。
<xsl:template match="/*[local-name() = 'rpc-reply' and *[local-name() = 'output']]">
<xsl:copy-of select="."/>
</xsl:template>
然后在不应用其他模板的情况下复制任何此类文档。