нужна помощь с преобразованием xsl - нежелательный текст - PullRequest
2 голосов
/ 24 августа 2011

Я пытаюсь сопоставить только xml-тег вторичного контента. но он выводит текст "/ Основной ключ идет сюда." Почему он выводит текст из заголовка и тега maincontent?

Xml:

<xml>
  <system-data-structure>
    <mastheads>
      <masthead>
        <image>
          <path>/</path>
        </image>
        <alt/>
      </masthead>
    </mastheads>
    <maincontent>
      <content>
        <p>Main content goes here.&#160;</p>
      </content>
    </maincontent>
    <secondary-content>
      <title>
        <h2>Secondary Content Title</h2>
      </title>
      <block>
        <path>/</path>
      </block>
      <content>
        <p>Secondary main content goes here.&#160;</p>
      </content>
    </secondary-content>
    <secondary-content>
      <title></title>
      <block>
        <content>
          <div class="aux-content-box">
            <h2 class="aux-content-box">More Information</h2>
            <ul>
              <li>
                <a href="#">Air Force Tuition Assistance</a>
              </li>
              <li>
                <a href="#">Army Tuition Assistance</a>
              </li>
              <li>
                <a href="#">Coast Guard Tuition Assistance</a>
              </li>
              <li>
                <a href="#">Marine Corps Tuition Assistance</a>
              </li>
              <li>
                <a href="#">Navy Tuition Assistance</a>
              </li>
              <li>
                <a href="#">National Guard State Tuition Assistance</a>
              </li>
              <li>
                <a href="#">National Guard Federal Tuition Assistance</a>
              </li>
              <li>
                <a href="#">Reserve Tuition Assistance</a>
              </li>
              <li>
                <a href="#">US Department of Veteran Affairs: Tuition Assistance Top-Up Program</a>
              </li>
            </ul>
          </div>
        </content>
        <path>/web/current-students/military/military-links-nav</path>
        <name>military-links-nav</name>
      </block>
      <content/>
    </secondary-content>
  </system-data-structure>
</xml>

xsl:

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="html" encoding="utf-8"/>
      <xsl:template match="/system-data-structure">

      <xsl:apply-templates select="secondary-content" />
       </xsl:template>


    <xsl:template match="secondary-content">
        Found a learner!
    </xsl:template>

    </xsl:stylesheet>

выход:

/ Main content goes here.  Found a learner! Found a learner! 

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Одной из причин такого поведения является соответствие строки вашего первого шаблона

<xsl:template match="/system-data-structure">

В вашем XML корневым элементом является xml , а не system-data-structure . Это означает, что он ничего не соответствует, и именно поэтому встроенные шаблоны работают, как описано в предыдущем ответе.

Попробуйте заменить вышеприведенную строку этой ...

<xsl:template match="/xml/system-data-structure">

Это должно привести к следующему выводу

Found a learner!  Found a learner! 
1 голос
/ 24 августа 2011

Это потому, что в вашем первом шаблоне вы пытаетесь сопоставить system-data-structure на корневом уровне. Однако xml является корневым уровнем в вашем примере XML. Измените соответствие на /xml/system-data-structure:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="utf-8"/>

  <xsl:template match="/xml/system-data-structure">  
    <xsl:apply-templates select="secondary-content" />
  </xsl:template>


  <xsl:template match="secondary-content">
    Found a learner!
  </xsl:template>

</xsl:stylesheet>
1 голос
/ 24 августа 2011

Это часто задаваемый вопрос.Это связано с встроенными шаблонами XSLT , которые неявно управляют обработкой различных узлов.

Переопределите встроенный шаблон для текстовых узлов следующим шаблоном:

<xsl:template match="text()"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...