Разделите содержимое узла xml с помощью xsl - PullRequest
0 голосов
/ 15 октября 2019

Я изменяю свой XML-документ с помощью xsl, и у меня возникают проблемы с разделением содержимого узла. Вот пример:

Входной документ XML

<root>
  <exampleNode>text 1 <insideNodeA/> text 2 <insideNodeB/> text 3</exampleNode>
  <exampleNode>text 4<insideNodeB/></exampleNode>
</root>

Короче говоря, у меня есть узел, в котором я могу иметь некоторый текст, и различные узлы (илинет) в любом порядке. Нет никакого способа узнать заранее, является ли содержимое только текстом, текстом и одним из узлов, только одним из узлов, текстом и обоими узлами в любом порядке и т. Д.

Вот что мне нужно иметь:

Требуется вывод XML

<root>
 <unwrapped>
   <txt>text 1</txt>
   <reworkedNodeA/>
   <txt>text 2</txt>
   <reworkedNodeB/>
   <txt>text 3</txt>
 </unwrapped>
 <unwrapped>
   <txt>text 4</txt>
   <reworkedNodeB/>
 </unwrapped>
</root>

И, конечно, я переделываю внутренние узлы и B.

Мой XSL-код

<xsl:template match="exampleNodee">
  <xsl:if test="count(*)&gt;0">
     <xsl:element name="unwrapped">
        <xsl:element name="txt"><xsl:value-of select="text()"/></xsl:element>
        <xsl:apply-templates select="child::node()"/>
     </xsl:element>
  </xsl:if>
</xsl:template>

Проблема в том, что этот код создает только один элемент "txt" с первым текстом "exampleNode", а затем применяет шаблоны для каждого дочернего узла.

Какя могу получить содержимое «exampleNode» в правильном порядке и применить правильные шаблоны для получения желаемого результата?

1 Ответ

0 голосов
/ 15 октября 2019

ОК. Я действительно нашел ответ на свой вопрос, в конце концов, он был довольно прост.

Так что все, что мне нужно было сделать, это создать шаблон, соответствующий "text ()", и изменить свой шаблон exammpleNode следующим образом:

<xsl:element name="unwrapped">
  <xsl:apply-templates select="text() | node()"/>
</xsl:element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...