Извлечь подмножество XML-файла, используя XSL - PullRequest
9 голосов
/ 25 февраля 2009

У меня есть этот XML-файл:

<Response>
    <errorCode>error Code</errorCode>
    <errorMessage>msg</errorMessage>
    <ResponseParameters>
        <className>
            <attribute1>a</attribute1>
            <attribute2>b</attribute2>
        </className>
    </ResponseParameters>
</Response>

И я хочу, чтобы результат был:

<className>
    <attribute1>a</attribute1>
    <attribute2>b</attribute2>
</className>

Мой текущий XSL-файл также содержит тег «ResponseParameters», который мне не нужен.

РЕДАКТИРОВАТЬ: обратите внимание, что имя узла className является динамическим. Я не знаю, как будет это имя во время выполнения.

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:output indent="yes" />

    <xsl:template match="/">
        <xsl:copy-of select="//ResponseParameters">
        </xsl:copy-of>
    </xsl:template>
</xsl:stylesheet>

Ответы [ 3 ]

14 голосов
/ 27 февраля 2009

Использование :

<xsl:copy-of select="/Response/ResponseParameters/node()"/>

Сокращение "//" очень дорогое (вызывает сканирование всего документа XML), и его следует избегать .

0 голосов
/ 25 февраля 2009
<xsl:copy-of select="Response/ResponseParameters//*"/>
0 голосов
/ 25 февраля 2009

Один из способов - передать параметр, содержащий имя узла, в XSLT и использовать параметр, переданный в функцию name (), для соответствия динамическому узлу.

Edit:

Но в этом простом случае любой из других ответов, предлагающих ResponseParameters // * или ResponseParameters / *, является гораздо более простым решением.

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