См. XSLT, входной XML, желаемый выходной XML и фактический вывод, я получаю ниже.Как сохранить префикс пространства имен при выполнении обработки XSLT
- Мне нужно УДАЛИТЬ все теги, если у него нет значения или пробелов. например: удалить
<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-обработки должен работать независимо от того, задано ли пространство имен по умолчанию или задано пространство имен явно через префикс. –