1
請參閱XSLT,輸入XML,所需的輸出XML和實際輸出,我在下面。如何在執行XSLT處理時保留名稱空間前綴
- 我需要刪除所有的標籤,如果它沒有價值或空白(s)。 如:刪除
<abc></abc>
- 使用下面的XSLT,空標籤轉換爲自行閉合的標籤(這是我完全想刪除),同樣的命名空間越來越去除 如:
<soapenv:Body>
被轉化爲<Body>
(我想保持原樣) - 請幫助我實現所需的輸出而不刪除名稱空間前綴。
XSLT
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="grandParent">
<xsl:copy>
<xsl:apply-templates select="@*" />
<childValues>
<xsl:value-of select="normalize-space(.)" />
</childValues>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
輸入XML--
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<netconf:rpc xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
message-id="81">
<netconf:edit-config>
<netconf:target>
<netconf:url/>
</netconf:target>
<netconf:config>
<requests module="E5100">
<request action="create" userName="sigma" sessionId="_sessionId">
<SSA>
<NetworkName>NTWK-ntwk_nm</NetworkName>
<PortNumber>2</PortNumber>
<PortType>vdsl</PortType>
<SSAProvision>
<UserDescr></UserDescr>
<SubscriberID></SubscriberID>
</SSAProvision>
</SSA>
</request>
</requests>
</netconf:config>
</netconf:edit-config>
</netconf:rpc>
</soapenv:Body>
</soapenv:Envelope>
所需的輸出XML:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<netconf:rpc xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
message-id="81">
<netconf:edit-config>
<netconf:target>
<netconf:url/>
</netconf:target>
<netconf:config>
<requests module="E5100">
<request action="create" sessionId="_sessionId" userName="sigma">
<SSA>
<NetworkName>NTWK-ntwk_nm</NetworkName>
<!-- Port Number removed-->
<PortType>vdsl</PortType>
<SSAProvision>
<UserDescr/>
<SubscriberID/>
</SSAProvision>
</SSA>
</request>
</requests>
</netconf:config>
</netconf:edit-config>
</netconf:rpc>
</soapenv:Body>
</soapenv:Envelope>
實際輸出:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<rpc xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
message-id="81">
<edit-config>
<target>
<url/>
</target>
<config>
<requests module="E5100">
<request action="create" sessionId="_sessionId" userName="sigma">
<SSA>
<NetworkName>NTWK-ntwk_nm</NetworkName>
<!-- want to remove this PortNumber completely-->
<PortNumber/>
<PortType>vdsl</PortType>
<SSAProvision>
<UserDescr/>
<SubscriberID/>
</SSAProvision>
</SSA>
</request>
</requests>
</config>
</edit-config>
</rpc>
</Body>
</Envelope>
** ** 1您的問題不能使用你的代碼被複制 - 看到:HTTP://的XslTransform .net/94rmq7j - ** 2。** XML輸入中沒有'grandParent'元素,因此第二個模板不會執行任何操作。 –
謝謝邁克爾,我對此非常陌生,由於某種原因,我必須儘快完成工作。我同意,在線xslt解析器可以工作,但在我嘗試的環境中以及某些基於Java的公司特定工具中,它將刪除名稱空間前綴。任何可能出現問題的指針或我需要檢查的內容。 – Ramesh
我假定您知道輸出文檔的節點仍然位於正確的名稱空間中(命名空間不*被移除),並且任何分析器或XML處理工具都應該可以工作,不管您是設置默認命名空間還是設置命名空間明確地通過前綴。 –