XSLT, чтобы получить родительский узел с определенным значением - PullRequest
1 голос
/ 23 января 2012

Что такое XSLT для получения родительского узла на основе значения дочернего элемента?

Мой xml:

<cast>
  <character>
    <name>Bugs</name>
    <id>1</id>
  </character>
  <character>
    <name>Daffy</name>
    <id>2</id>
  </character>

Я пробовал это:

<xsl:template match="/cast/character/id">
    <xsl:if test="text()=1">
        <xsl:apply-templates select="../self" mode='copier'/>
    </xsl:if>
</xsl:template>

<xsl:template match="*" mode='copier'>
    <xsl:apply-templates />
</xsl:template>

Но при этом выводится текст каждого узла в документе.

РЕДАКТИРОВАТЬ: я должен вывести XML здесь, я планирую расширить это для генерации XML

Ответы [ 3 ]

1 голос
/ 23 января 2012

Просто используйте :

<xsl:apply-templates select="/*/character[id=1]"/>

или, если нужный узел должен быть скопирован без дальнейшей обработки :

<xsl:copy-of select="/*/character[id=1]"/>
1 голос
/ 23 января 2012

Я полагаю, что вы печатаете все, потому что процессор начинает совпадать в корне, и единственный указанный вами шаблон предназначен для id элементов, поэтому все копируется по умолчанию.Попробуйте это:

<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <output method="text" />
    <template match="/">
        <apply-templates select="//id" />
    </template>
    <template match="id">
        <if test="text()='1'">
            <value-of select=".." />
        </if>
    </template>
</stylesheet>

Или, если вы просто хотите указать имя персонажа, вы можете заменить значение атрибута select в элементе value-of на "../name".

0 голосов
/ 23 января 2012
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/cast/character">
     <xsl:if test="id=1">
        <xsl:copy-of select="." />
     </xsl:if>
  </xsl:template>
</xsl:stylesheet>

Невозможно добавить комментарий.Следовательно, поместите это здесь

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