2017-02-08 9 views
0

Я хочу добавить новый тег для детей в тег OPO с именем A2
с значениями concatenate, которые образуют тег Cod и A1.Xslt создать новый дочерний элемент со значениями других тегов

Например для этого XML

<OPO> 
    <Cod>12345</Cod> 
    <A1>Anders</A1> 
</OPO> 

Я хочу получить

<OPO> 
     Cod>12345</Cod> 
     <A1>Anders</A1> 
     <A2>12345 Anders</A2> 
</OPO> 

Как можно это сделать?

Оригинальный XML является

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:aaa="http://xxx/"> 
<soap:Header> 
    <MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:4d6b87d8-fe14-4579-ac34-fe841c184a4b</MessageID> 
        <RelatesTo RelationshipType="Reply" xmlns="http://www.w3.org/2005/08/addressing">uuid:1f9b0c7e-f36c-4fa3-ac2b-2377b57b6634</RelatesTo> 
    <Action xmlns="http://www.w3.org/2005/08/addressing">http://xxx</Action> 
</soap:Header> 
<soap:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
        <OP1 xmlns="http://xxx/"> 
        <OPR> 
         <OPO> 
          <Cod>..</Cod> 
          <A1>hi my...</A1> 

         </OPO> 
        </OPR> 
        </OP1> 
       </soap:Body> 
      </soap:Envelope> 
+0

Как это отличается от [ваш предыдущий вопрос] (HTTP: // stackoverflow.com/questions/42098743/xslt-soap-message)? Подсказка: это не так. –

+0

У меня есть проблема, чтобы получить значения других тегов и concat. Я использую его, но не работают

ответ

0

Решение является

<xsl:template match="aaa:OPO"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
     <xsl:element name="A2" namespace="http://xxx/"> 
      <xsl:value-of select = "concat(aaa:Cod, ' ', aaa:A1)" /> 
     </xsl:element> 
    </xsl:copy> 
</xsl:template> 
<xsl:strip-space elements="*"/><!--remove space for the removed tags--> 
0

Если у вас есть входной XML, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:aaa="http://xxx/"> 
    <soap:Header> 
     <MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:4d6b87d8-fe14-4579-ac34-fe841c184a4b</MessageID> 
     <RelatesTo RelationshipType="Reply" xmlns="http://www.w3.org/2005/08/addressing">uuid:1f9b0c7e-f36c-4fa3-ac2b-2377b57b6634</RelatesTo> 
     <Action xmlns="http://www.w3.org/2005/08/addressing">http://xxx</Action> 
    </soap:Header> 
    <soap:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <OP1 xmlns="http://xxx/"> 
      <OPR> 
       <OPO> 
        <Cod>12345</Cod> 
        <A1>Anders</A1> 
       </OPO> 
      </OPR> 
     </OP1> 
    </soap:Body> 
</soap:Envelope> 

XSLT как этот

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aaa="http://xxx/"> 
    <xsl:output method="xml" indent="yes" encoding="utf-8" /> 

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

    <xsl:template match="aaa:OPO"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*" /> 
      <xsl:element name="A2" namespace="{namespace-uri()}"> 
       <xsl:value-of select="concat(aaa:Cod, ' ', aaa:A1)" /> 
      </xsl:element> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

даст вам желаемый результат, как этот

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:aaa="http://xxx/"> 
    <soap:Header> 
     <MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:4d6b87d8-fe14-4579-ac34-fe841c184a4b</MessageID> 
     <RelatesTo xmlns="http://www.w3.org/2005/08/addressing" RelationshipType="Reply">uuid:1f9b0c7e-f36c-4fa3-ac2b-2377b57b6634</RelatesTo> 
     <Action xmlns="http://www.w3.org/2005/08/addressing">http://xxx</Action> 
    </soap:Header> 
    <soap:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <OP1 xmlns="http://xxx/"> 
      <OPR> 
       <OPO> 
        <Cod>12345</Cod> 
        <A1>Anders</A1> 
        <A2>12345 Anders</A2> 
       </OPO> 
      </OPR> 
     </OP1> 
    </soap:Body> 
</soap:Envelope> 

PS: У меня был полный исходный файл на диске со вчерашнего дня ;-)