2012-04-03 3 views
0

Я разработал таблицу стилей XML, чтобы преобразовать относительно простой XML-файл в VS2010. Когда я запускаю XSLT Debugging в VS, он отображает ожидаемый результат в новом окне.Преобразования XML в браузере не работают

Так я тогда добавил ссылку на файл XSLT в исходном XML:

<?xml-stylesheet type="text/xsl" href="ABC.xslt"?> 

Однако, когда я просмотреть этот файл в браузере, я не получаю преобразованный результат. В IE9, Firefox и Chrome

XSLT (возможно, в измененной форме) будет использоваться третьей стороной для создания окончательного XML, поэтому это не имеет существенного значения, но это полезный инструмент, демонстрирующий, что вывод из исходной базы данных (которая генерирует исходный XML), после преобразования будет выглядеть как окончательный XML.

XML Пример:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="abc.xslt"?> 
<afterTreatmentSystemRequest> 
    <afterTreatmentSystem> 
     <ID>93073010005597</ID> 
     <shipmentDate>20120330</shipmentDate> 
     <technicalApprovalDate>20120330</technicalApprovalDate> 
    </afterTreatmentSystem> 
    <executionSettingsDate>2012-03-30T14:17:26</executionSettingsDate> 
</afterTreatmentSystemRequest> 

XSLT:

<?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:output method="xml" indent="yes"/> 

    <xsl:template match="/afterTreatmentSystemRequest"> 
      <nsmajorassemblyai:storeAfterTreatmentSystemRequest category="MajorAssemblyAdapter" delta="true" version="2.10" xmlns:nsmajorassemblyai="http://majorassembly.mysite.com/ai"> 
       <requestHeader userId="d2vswen"/> 
       <xsl:apply-templates select="afterTreatmentSystem" /> 
       <xsl:apply-templates select="executionSettingsDate" /> 
      </nsmajorassemblyai:storeAfterTreatmentSystemRequest> 
    </xsl:template> 

    <xsl:template match="afterTreatmentSystem"> 
      <afterTreatmentSystem delta="true" dataCardAvailable="true"> 
       <xsl:attribute name="id"> 
        <xsl:value-of select="ID"/> 
       </xsl:attribute> 
       <activeCustomer addressCity="" addressCountry="" addressStreet="" addressZip="" customerNumber="" firstname="" name=""/> 
       <activeProductDate> 
        <xsl:attribute name="shipmentDate"> 
         <xsl:value-of select="shipmentDate"/> 
        </xsl:attribute> 
        <xsl:attribute name="technicalApprovalDate"> 
         <xsl:value-of select="technicalApprovalDate"/> 
        </xsl:attribute> 
       </activeProductDate> 
      </afterTreatmentSystem> 
    </xsl:template> 

    <xsl:template match="executionSettingsDate"> 
      <executionSettings causation="plant" issueThreshold="err" systemPriority="2" unresolvedConflictAction="notifyAdmin" userId="d2vswen"> 
       <xsl:attribute name="date"> 
        <xsl:value-of select="."/> 
       </xsl:attribute> 
      </executionSettings> 

    </xsl:template> 
</xsl:stylesheet> 

UPDATE: Я снова вставил XML и XSL сегменты - убедившись, что они соответствуют версии, которые работают хорошо в VS2010. Следуя предложению Димитрия использовать IE Developer Tools (F12), я вижу, что произошел с преобразованием, но мне все еще не хватает элемента executeSettings.

Ожидаемый выход:

<?xml version="1.0" encoding="utf-8"?> 
<nsmajorassemblyai:storeAfterTreatmentSystemRequest category="MajorAssemblyAdapter" delta="true" version="2.10" xmlns:nsmajorassemblyai="http://majorassembly.mysite.com/ai"> 
    <requestHeader userId="d2vswen" /> 
    <afterTreatmentSystem delta="true" dataCardAvailable="true" id="93073010005597"> 
    <activeCustomer addressCity="" addressCountry="" addressStreet="" addressZip="" customerNumber="" firstname="" name="" /> 
    <activeProductDate shipmentDate="20120330" technicalApprovalDate="20120331" /> 
    </afterTreatmentSystem> 
    <executionSettings causation="plant" issueThreshold="err" systemPriority="2" unresolvedConflictAction="notifyAdmin" userId="d2vswen" date="2012-03-30T14:17:26" /> 
</nsmajorassemblyai:storeAfterTreatmentSystemRequest> 
+0

Это подняло бы ошибку в VS - XML, не является хорошо сформированным XML-документ. Пожалуйста исправьте. Если вы все равно получите тот же результат, убедитесь, что файл 'abc.xslt' находится в том же каталоге, что и файл XML. –

+0

XML хорошо сформирован, и оба файла находятся в одной папке. – CJM

+0

CJM: Как было сказано в моем ответе, преобразование выполняется нормально, и это можно проверить. Браузер не отображает результат, потому что это не html. –

ответ

1

Предыдущий ответ удален, когда вы установили пример.

Это работает для меня, как с saxon6 в командной строке и IE (9) в браузере

enter image description here

+0

Извините, Дэвид - в попытке проверить мой ОП, я сделал это хуже! Я добавил неверный XSLT - теперь исправлено. – CJM

+0

Хорошо, я переделаю XML из моего опубликованного XML/XSLT и посмотрю, смогу ли я получить аналогичные результаты. – CJM

+0

Я не совсем уверен, что я сделал неправильно, но сочетание XML + XSLT, которое я разработал в VS *, правильно преобразуется в IE9.Я не помню, как меняла версию VS, поэтому я могу только предположить, что я первоначально скопировал что-то неправильно при создании моей тестовой версии IE9. – CJM

1

Преобразование выполняется правильно с IE9, но не отображается rewult, так как это не HTML.

Чтобы проверить это, нажмите F12 и разверните элементы на вкладке HTML.

+0

F12 - полезный трюк, который я бы упустил! Это показывает, что * некоторые * преобразования произошли, но не все - элемент executeSettings отсутствует. – CJM