Как получить весь дочерний элемент из узла - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу извлечь дочерний элемент из XML со всеми значениями и их элементами

Child: node (): - не вернуть результат child :: * - получить значение первого элемента

Пример XML

<testdata>
 <Name>
  <Name1>Rahul</Name1>
  <Name2>Rahul</Name2>
  <Name3>Rahul</Name3>
  <Name4>Rahul</Name4>
  <Name5>Rahul</Name5>
  <Name6>Rahul</Name6>
  <Name>
<testdata>

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:Util="urn:Util" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs msxsl xsl Util">
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes"/>
<xsl:template match="testdata">
<DummyallMane>
<xsl:value-of select="//testdata/name/child::node()
    </xsl:template>

Ожидаемый результат

<Name1>Rahul</Name1>
<Name2>Rahul</Name2>
<Name3>Rahul</Name3>
<Name4>Rahul</Name4>
<Name5>Rahul</Name5>

1 Ответ

0 голосов
/ 11 февраля 2019

Во-первых, вы используете xsl:value-of, который возвращает только текстовое значение узла.Вы должны использовать xsl:copy-of здесь, чтобы скопировать сами узлы.

Кроме того, в XSLT 1.0, если вы используете xsl:value-of на нескольких узлах, он вернет значение только первого (поэтомуchild:* возвращает только первое при использовании в xsl:value-of).Обратите внимание, что child::node() ничего не возвращает, так как node() также выбирает текстовые узлы, и поэтому он выберет узел пробела перед Name1.(Если бы вы добавили xsl:strip-space к вашему узлу, вы бы получили результаты).

Итак, вы должны делать это ...

<xsl:copy-of select="Name/*" />

(Также обратите внимание, что XSLTчувствителен к регистру, поэтому name фактически не выберет Name)

Посмотрите, как это работает здесь ... http://xsltfiddle.liberty -development.net / gWvjQeZ

Обратите внимание, я предполагаю, что Name6 должно быть в ваших ожидаемых результатах тоже.Но если вы действительно хотите исключить последний узел, вы можете сделать это ...

<xsl:copy-of select="Name/*[position() != last()]" />

Или это, чтобы исключить узел с данным именем

<xsl:copy-of select="Name/*[not(self::Name6)]" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...