2016-07-02 4 views
-1

Я пытаюсь удалить некоторые элементы из ответа на мыло, которое я получаю в формате XML. Однако, когда я использую предложения в других вопросах XLST, я всегда удаляю все содержимое, вложенное в этот элемент. Я просто хочу, чтобы пропустить эту часть XML-документ, так что я могу иметь чистый XML документ без каких-либо пространств имен или мыл конвертов и т.д.Удаление элементов из xml-файла с XLST

Я попытался использовать идеи, как это: remove xml tags with XSLT

но без везения , Если бы кто-нибудь мог помочь мне в этом, это было бы здорово.

Пример XML:

<?xml version="1.0" encoding="UTF-8"?> 
<request_dataResponse encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><request_dataReturn type="soapenc:string"><Vessel> 
    <VesselID>117774</VesselID> 
    <IMO>7625988</IMO> 
    <VslName>Shamrock Pride</VslName> 
</Vessel> 
</request_dataReturn></request_dataResponse> 

Обратите внимание, что по какой-то причине тег судно не на следующей строке, но находится в конце мыльных тегов. В этой строке также есть несколько меток мыла, называемых Request and Return.

То, что я хочу, чтобы достичь является XML, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<Vessel> 
    <VesselID>117774</VesselID> 
    <IMO>7625988</IMO> 
    <VslName>Shamrock Pride</VslName> 
</Vessel> 

Я попытался с помощью XSLT следующим образом:

<?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="request_dataResponse|request_dataReturn"/> 
</xsl:stylesheet> 

Но он просто удаляет все данные в тегах вложенных после мыльные тэги.

Может кто-нибудь, пожалуйста, помогите мне с этим?

+0

Это не ваш вход, не так ли? Поскольку это не хорошо сформированный XML-документ: для 'request_dataResponse' и' request_dataReturn', а '' не содержит закрывающих тегов '' не соответствует ''. Все, что вы когда-либо выберете, это сообщение об ошибке. –

+0

Правильно. Я пропустил часть данных из-за того, что он был чувствительным к компании. Но я думал, что люди поймут эту идею. исправление его сейчас – AronChan

+0

Идея здесь заключается в том, чтобы запустить ваш код и воспроизвести проблему, прежде чем перейти к ее решению. –

ответ

0

Я только предполагаю здесь, потому что ваш вклад не является XML-документ, но, чтобы удалить элемент обертки и держать его потомок вы должны сделать:

<xsl:template match="wrapper"> 
    <xsl:apply-templates/> 
</xsl:template> 

То есть в вашем случае:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<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="request_dataResponse | request_dataReturn"> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 

Что вы теперь обрабатываете корневой элемент request_dataResponse и останавливается там.

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