2016-02-09 5 views
1

Это мой первый набег на XSLT, так что я мог бы сделать что-то совершенно неправильно. Это минимальный репрограмм (который не работает), но в конечном решении я знаю только, что желаемое значение находится на 2 уровня от узла DETAIL.Невозможно получить значение атрибута на узле предка в XSLT

У меня есть следующий фрагмент XSLT (XSLT 1.0 и не может обновить до 2.0)

<xsl:template match="/"> 
     <xsl:apply-templates select="//DETAIL"/> 
</xsl:template> 

<xsl:template match="DETAIL"> 
    <br/>Current: <xsl:value-of select="@Name"/> 
    <br/>Ancestor: <xsl:value-of select="../../@Name"/> 
</xsl:template> 

У меня есть следующий XML-файл

<?xml version="1.0" encoding="utf-8"?> 
<ROOT Name="Desired"> 
    <CHILD> 
     <DETAIL Name="NotTheDesired"> 
     </DETAIL> 
    </CHILD> 
</ROOT> 

что приводит (не уведомление не выход для атрибута предка) при обработке в IE 11 в Windows 10, но работает (дает правильное значение для атрибута предка) при обработке с помощью .NET XslCompiledTransform.

Current: NotTheDesired 
Ancestor: 

Я попытался многочисленные вариации этой темы в том числе с использованием строки() вокруг выбора выражения и т.д. Каждый перестановкой, что я пытался в результате чего не выход для значения атрибута предка.

Я не писал код для преобразования в IE, но ниже - это то, что делается. xml - это сериализованная версия xml. xsltDoc является XLST

var xmlDoc = new windows.ActivbeXObject("MSXML2.DOMDocument.6.0"); 
xmlDoc.async = false; 
xmlDoc.loadXml(xml); 
xmlDoc.resolveExternals = true; 
var htmlString = xmlDoc.transformNode(xsltDoc); 
+0

Ваш XSLT фрагмент выглядит отлично. Тестирование на http://xsltransform.net/ncdD7mU показывает, что все счастливы! У вас есть другие шаблоны в XSLT? Благодаря! –

+0

Итак, как вы запускаете XSLT с IE, используя скрипт, используя инструкцию обработки 'xml-stylesheet'? Если вы хотите опубликовать минимальный репрограмм, то покажите минимальную, но полную таблицу стилей вместе с объяснением того, как вы используете этот XSLT в IE. Когда я загружаю http://home.arcor.de/martin.honnen/xslt/test2016020901.xml, который использует http://home.arcor.de/martin.honnen/xslt/test2016020901.xsl, то и Edge, и IE show 'Current: NotTheDesired Ancestor: Desired' в Windows 10. –

+0

@martin Отредактировал вопрос, чтобы включить информацию о том, как выполняется преобразование. Будет пытаться вырезать достаточно материала для полного воспроизведения. –

ответ

0

Как выясняется, код, который делает преобразование загружен XML в JQuery XMLDocument, сделал некоторую обработку, включая чередование покинуть в DocumentElement, а затем сериализовать его и загрузить его в Microsoft XML через loadXml. (Несмотря на то, что все узлы, которые я хотел, все еще были там, что-то в этом процессе явно не давало желаемых результатов.) Только для первоначального разработчика потребовалось около 2 часов, чтобы понять этот беспорядок. Как только я убедил его просто сохранить исходную строку и загрузить ее, прежде чем вызывать преобразование, все работает так, как должно. Неудивительно, что я чувствовал, что некоторая обработка клиента работает некорректно.

Спасибо всем за то, что сказал вещи, которые заставили меня смотреть в правильном направлении, чтобы подтолкнуть сценариста.

Смежные вопросы