2016-08-09 3 views
0

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

Removing XML Nodes using XSLT?

Например

<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dt="example.lessson.1:v3" > 
    <dt:Header>  
     <dt:MessageId>12121212121212121</dt:MessageId> 
     <dt:Timestamp>2013-01-01T00:00:00</dt:Timestamp> 
     <dt:MessageType>2</dt:MessageType> 
    </dt:Header> 
<dt:Body > 
<Rowsets> 
<Rowset> 
    <Row> 
     <FirstName>Michael</FirstName> 
     <LastName>David</LastName> 
     <Phone>1234567890</Phone> 
     <ID>111111<ID> 
    </Row> 
    <Row> 
     <FirstName>David</FirstName> 
     <LastName>Michael</LastName> 
     <Phone></Phone> 
     <ID>222222<ID> 
    </Row> 
    <Row> 
     <FirstName>Yang</FirstName> 
     <LastName>Christina</LastName> 
     <Phone>2345678901</Phone> 
     <ID>333333<ID> 
    </Row> 
    <Row> 
     <FirstName>Grey</FirstName> 
     <LastName>Meredith</LastName> 
     <Phone>3456789012</Phone> 
     <ID>4444444<ID> 
    </Row> 
    <Row> 
     <FirstName>David</FirstName> 
     <LastName>Shepherd</LastName> 
     <Phone>56789</Phone> 
     <ID>5555555<ID> 
    </Row> 
</Rowset> 
</Rowsets> 
</body> 

мне нужно запустить XSLT, который будет использовать идентификатор проходит и создать новый XML только с этим узлом и заголовком и другими тегами тела сохранил пример, если я прохожу 111111,222222 , 333333 в качестве входного сигнала на выходе должно быть

<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dt="example.lessson.1:v3" > 

    <dt:Header>  
     <dt:MessageId>12121212121212121</dt:MessageId> 
     <dt:Timestamp>2013-01-01T00:00:00</dt:Timestamp> 
     <dt:MessageType>2</dt:MessageType> 
    </dt:Header> 
<dt:Body > 
<Rowsets> 
<Rowset> 
    <Row> 
     <FirstName>Michael</FirstName> 
     <LastName>David</LastName> 
     <Phone>1234567890</Phone> 
     <ID>111111<ID> 
    </Row> 
    <Row> 
     <FirstName>David</FirstName> 
     <LastName>Michael</LastName> 
     <Phone></Phone> 
     <ID>222222<ID> 
    </Row> 
    <Row> 
     <FirstName>Yang</FirstName> 
     <LastName>Christina</LastName> 
     <Phone>2345678901</Phone<ID>333333<ID> 
    </Row> 
</Rowset> 
</Rowsets> 
</body> 

ответ

0

Используйте параметр и сравнить ID:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:param name="ids">111111,222222,333333</xsl:param> 
    <xsl:variable name="id-sequence" select="tokenize($ids, '\s*,\s*')"/> 

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

    <xsl:template match="Row[not(ID = $id-sequence)]"/> 
</xsl:transform> 

Интернет на http://xsltransform.net/ejivdGF.

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