Как добавлять и удалять элементы в узле XML с помощью XSLT - PullRequest
0 голосов
/ 18 октября 2018
<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
   <classes>
      <class id="101"
            <documents>
                <document isWaived="true" name="Doc 1">true</document>
                <document isWaived="false" name="Doc 2">false</document>
            </documents>
        </class>
    </classes>
</partner>

В приведенном выше xml я должен сначала удалить все элементы в узле документов, чтобы получить следующий вывод:

<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
   <classes>
      <class id="101"
            <documents>
            </documents>
        </class>
    </classes>
</partner>

И хотел добавить новый набор документовчтобы получить следующий вывод.

<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
   <classes>
      <class id="101"
            <documents>
                <document isWaived="false" name="Doc 3">false</document>
            </documents>
        </class>
    </classes>
</partner>

В настоящее время я использую следующий xsl для удаления содержимого в узле документа.

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

<xsl:template match="document" />

Но это дает такой вывод

<?xml version="1.0" encoding="UTF-8"?>
<partner id="A12345">
   <classes>
      <class id="101"
            <documents/>
        </class>
    </classes>
</partner>

Теперь мне нужно добавить некоторые элементы в массив узлов.Как мы можем это сделать.Кто-нибудь может помочь по удалению содержимого узла и добавлению нового значения.

1 Ответ

0 голосов
/ 18 октября 2018

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

<xsl:template match="documents">
    <xsl:copy>
        <document isWaived="false" name="Doc 3">false</document>
    </xsl:copy>
</xsl:template>

Посредством вашего комментария вы ищете функцию tokenize ().

<xsl:for-each select="tokenize($documentstring,';')"> <!-- the second argument is the character you want to split the string on -->
     <document isWaived="false" name="{.}"> 
         <!-- The braces allow you to run codesegments inside the attribute -->
     </document>
</xsl:for-each>     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...