Вопрос по – Удалить элементы на основе значения другого элемента - XSLT

2

У меня есть таблица стилей, которую я использую для удаления определенных элементов на основе значения другого элемента. Тем не менее, это не работает ...

Образец входного XML

<Model>
<Year>1999</Year>
<Operation>ABC</Operation>
<Text>Testing</Text>
<Status>Ok</Status>
</Model>

Если значением операции является «ABC»; затем удалите узлы Text и Status из XML. И дает следующий вывод.

<Model>
<Year>1999</Year>
<Operation>ABC</Operation>
</Model>

Вот моя таблица стилей, которую я использую, но она удаляет узлы Text и Status из всех XML-файлов, даже если операция не является «ABC».

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:variable name="ID" select="//Operation"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="Text | Status">
    <xsl:if test ="$ID ='ABC'">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

Заранее спасибо

Как бы я сделал то же самое, когда пространство имен присутствует, как

<ns0:next type="Sale" xmlns:ns0="http://Test.Schemas.Inside_Sales">

Ваш Ответ

4   ответа
4

Error: User Rate Limit Exceededxsl:ifError: User Rate Limit Exceeded

<xsl:if test="../Operation!='ABC'">

Error: User Rate Limit Exceededxsl:variable.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded JohnXsl
2

Error: User Rate Limit Exceeded

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="/Model">
      <xsl:choose>
        <xsl:when test="Operation[text()!='ABC']">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy>
                <xsl:apply-templates select="Year"/>
                <xsl:apply-templates select="Operation"/>
            </xsl:copy>
        </xsl:otherwise>
      </xsl:choose>
  </xsl:template>
</xsl:stylesheet>
Error: User Rate Limit Exceeded JohnXsl
Error: User Rate Limit ExceededdraduError: User Rate Limit Exceeded
4

Here is a complete XSLT transformation -- short and simpleError: User Rate Limit Exceededxsl:if, xsl:choose, xsl:when, xsl:otherwise):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match=
 "*[Operation='ABC']/Text | *[Operation='ABC']/Status"/>
</xsl:stylesheet>

When this transformation is applied on the provided XML document:

<Model>
    <Year>1999</Year>
    <Operation>ABC</Operation>
    <Text>Testing</Text>
    <Status>Ok</Status>
</Model>

the wanted, correct result is produced:

<Model>
   <Year>1999</Year>
   <Operation>ABC</Operation>
</Model>
Error: User Rate Limit Exceeded JohnXsl
Error: User Rate Limit Exceededstackoverflow.com/q/10635718/662877 JohnXsl
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

Error: User Rate Limit Exceeded<xsl:if>Error: User Rate Limit Exceeded

<xsl:template match="(Text | Status)[../Operation != 'ABC']"/>
Error: User Rate Limit Exceeded JohnXsl

Похожие вопросы