2017-10-28 252 views
1

我有下面的xslt。這是用來標準化整個XML。如何使用xslt跳過特定元素的xml

normalize_xslt = ''」

它能夠正確地規範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其中xml元素是<output> 需要在我的xslt中更改什麼?

回答

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-replyoutput名稱是衆所周知的表示你不想改變什麼,然後你也可以添加例如

<xsl:template match="/*[local-name() = 'rpc-reply' and *[local-name() = 'output']]"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

然後複製任何這樣的文檔而不應用其他模板。

+0

與此它刪除整個輸出。我只是得到' urn:uuid:5c4d99db-5b2b-4c88-8f69-8fe1d2c29bfe' –

+0

也許我誤解了你想達到的目標。 「跳過特定元素」是什麼意思?考慮編輯你的問題,並顯示你想要的結果。 –

+0

如果XML標籤爲'',我不想應用標準化空間,因爲我在發佈的xml中有一個。 –