xslt help - мое преобразование отображается неправильно - PullRequest
1 голос
/ 28 мая 2010

Я пытаюсь применить преобразование xlst, используя следующий файл. Это очень просто, но я хотел бы построить это, когда правильно настрою.

 <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="/">
  <div>
  <h2>Station Inventory</h2>
  <hr/>
  <xsl:apply-templates/>
  </div>
</xsl:template>

 <xsl:template match="StationInventory">
   <h5><xsl:value-of select="station-name" /></h5>
   <xsl:apply-templates select="detector"/>
  </xsl:template>


  <xsl:template match="detector">
   <span>
     <xsl:value-of select="detector-name" />
  </span>
  <br/>
  </xsl:template>
 </xsl:stylesheet>

Вот какой-то xml, который я использую для источника.

 <StationInventoryList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns="http://www.dummy-tmdd-address">
  <StationInventory>
   <station-id>9940</station-id>
   <station-name>Zone 9940-SEB</station-name>
   <station-travel-direction>SEB</station-travel-direction>
   <detector-list>
  <detector>
    <detector-id>2910</detector-id>
    <detector-name>1999 West Smith Exit SEB</detector-name>
  </detector>
  <detector>
    <detector-id>9205</detector-id>
    <detector-name>CR-155 Exit SEB</detector-name>
  </detector>
  <detector>
    <detector-id>9710</detector-id>
    <detector-name>Pt of View SEB</detector-name>
  </detector>
  </detector-list>
  </StationInventory>
</StationInventoryList>

Есть идеи, что я делаю не так? Простое намерение здесь состоит в том, чтобы составить список станций, а затем составить список детекторов на станции. Это маленький кусочек XML. Он будет иметь несколько элементов StationInventory.

Я использую данные в качестве источника для элемента управления asp: xml и файл xslt в качестве источника преобразования.

        var service = new InternalService();
        var result = service.StationInventory();

        invXml.DocumentContent = result;
        invXml.TransformSource = "StationInventory.xslt";
        invXml.DataBind();

Любые советы, конечно, приветствуются. Удачных выходных.

Cheers, ~ Ск

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Заменить на

  <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:st="http://www.dummy-tmdd-address">
<xsl:template match="/">
  <div>
  <h2>Station Inventory</h2>
  <hr/>
  <xsl:apply-templates/>
  </div>
</xsl:template>

 <xsl:template match="st:StationInventory">
   <h5><xsl:value-of select="st:station-name" /></h5>
    <ul>
        <xsl:apply-templates select="st:detector-list/st:detector"/>
    </ul>
  </xsl:template>


  <xsl:template match="st:detector">
   <li>
     <xsl:value-of select="st:detector-name" />
  </li>
  </xsl:template>
 </xsl:stylesheet>

, поскольку детектор является дочерним по отношению к списку детекторов, а не к инвентарю станции, и существует пространство имен

1 голос
/ 28 мая 2010

Есть две очевидные проблемы :

  1. Все элементы в документе XML находятся в пространстве имен по умолчанию, но в коде XSLT на них ссылаются как на принадлежащие "пространству имен".

  2. Элемент <StationInventory> не имеет <detector> дочерних элементов.

Решение

В приведенной ниже таблице стилей XSLT исправлены две вышеуказанные проблемы:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:d="http://www.dummy-tmdd-address">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <div>
  <h2>Station Inventory</h2>
  <hr/>
  <xsl:apply-templates/>
  </div>
 </xsl:template>

 <xsl:template match="d:StationInventory">
   <h5><xsl:value-of select="d:station-name" /></h5>
   <xsl:apply-templates select="d:detector-list/d:detector"/>
 </xsl:template>

  <xsl:template match="d:detector">
   <span>
     <xsl:value-of select="d:detector-name" />
   </span>
   <br/>
  </xsl:template>
 </xsl:stylesheet>

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

<div xmlns:d="http://www.dummy-tmdd-address">
    <h2>Station Inventory</h2>
    <hr />
    <h5>Zone 9940-SEB</h5>
    <span>1999 West Smith Exit SEB</span>
    <br />
    <span>CR-155 Exit SEB</span>
    <br />
    <span>Pt of View SEB</span>
    <br />
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...