удалить дочерний тег и связать его значение с именем родительского тега - PullRequest
0 голосов
/ 30 января 2020

Возможно ли достичь этого с помощью XSLT 1.0, пожалуйста?

Пример ввода будет

<Variable_Attributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <Row>
        <MATNR>3006921_CAR</MATNR>
        <REFERENCE>
            <uom>EA</uom>
            <product_id>3006921_EA</product_id>
            <quantity>6</quantity>
        </REFERENCE>
    </Row>
    <Row>
        <MATNR>3006921_CAR</MATNR>
        <REFERENCE>
            <uom>CAR</uom>
            <product_id>3006921_EA</product_id>
            <quantity>6</quantity>
        </REFERENCE>
    </Row>
</Variable_Attributes>

Я хотел бы удалить теги <uom> и переименовать родительский <REFERENCE> теги путем конкатенации значения из удаленного тега uom.

Таким образом, выше будет:

<Variable_Attributes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <Row>
        <MATNR>3006921_CAR</MATNR>
        <REFERENCE_EA>
            <product_id>3006921_EA</product_id>
            <quantity>6</quantity>
        </REFERENCE_EA>
    </Row>
    <Row>
        <MATNR>3006921_CAR</MATNR>
        <REFERENCE_CAR>
            <product_id>3006921_EA</product_id>
            <quantity>6</quantity>
        </REFERENCE_CAR>
    </Row>
</Variable_Attributes>

С наилучшими пожеланиями

Леннон

1 Ответ

1 голос
/ 30 января 2020

xsl:element позволяет вычислить имя элемента результата, например,

<xsl:template match="REFERENCE">
  <xsl:element name="{local-name()}{uom}">
    <xsl:apply-templates />
  </xsl:element>
</xsl:template>

<xsl:template match="uom"/>

Конечно, базовая обработка будет выполняться шаблоном преобразования идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...