2016-06-06 5 views
0

У меня есть следующий XMLXSLT для удаления элемента, когда родитель имен определяются

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<envelopeSummary xmlns="http://www.docusign.com/restapi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <envelopeId>123</envelopeId> 
    <status>sent</status> 
    <statusDateTime>2016-06-02</statusDateTime> 
    <uri>/envelopes/123</uri> 
</envelopeSummary> 

Я пытаюсь придумать XSLT, что бы удалить Uri элемента. Я пробовал XSLT ниже, но он не удаляет элемент uri.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

<xsl:template match="uri"/> 

</xsl:stylesheet> 

Интересно, что это работает, если я избавлюсь от пространств имен, определенных в элементе envelopeSummary исходного XML. К сожалению, я не могу изменить XML.

Любая идея, как удалить элемент, если родительский элемент имеет определенное пространство имен? Заранее спасибо!

ответ

0

Как удалить элемент, если родительский элемент имеет определенное пространство имен?

Проблема заключается в том не, что «родительский элемент имеет пространство имен, определенные». Все элементы в вашем XML-входе находятся в пространстве имен по умолчанию, объявленном в корневом элементе (пространства имен наследуются).

Для решения такого элемента, необходимо объявить пространство имен в таблице стилей, присвоить ему префикс и использовать этот префикс при выборе/соответствия элемента:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns0="http://www.docusign.com/restapi"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="ns0:uri"/> 

</xsl:stylesheet> 

Заметьте, что это сохраняет исходные пространства имен на все узлы, которые передаются с помощью преобразования .

+0

Hi @ michael.hor257k, Большое спасибо за ваш ответ и объяснение! Это сработало!!! В этот понедельник не так плохо, как казалось час назад :) Еще раз спасибо. – jubedus

+0

"* В этот понедельник не так плохо, как казалось час назад *« Просто дайте ему больше времени ... –

Смежные вопросы