[英]Cannot get value of Attribute on a Ancestor node in XSLT
這是我第一次涉足XSLT,所以我可能會遇到完全錯誤的情況。 這是最小再現值(確實會失敗),但是在最終解決方案中,我只知道期望值是從DETAIL節點上移2個級別的值。
我有以下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>
在Windows 10上的IE 11中進行處理時,結果為(請注意沒有祖先屬性的輸出),但在使用.NET XslCompiledTransform處理時,結果為(為祖先的屬性提供了適當的值)。
Current: NotTheDesired
Ancestor:
我已經嘗試過此主題的多種變體,包括在選擇表達式周圍使用string()等。我嘗試進行的每個置換都導致沒有祖先屬性值的輸出。
我沒有編寫代碼來在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);
事實證明,進行轉換的代碼將XML加載到jQuery XMLDocument中,進行了一些處理,包括剝離DocumentElement,然后對其進行序列化,然后通過loadXml將其加載到Microsoft XML中。 (即使我想要的所有節點仍然存在,該過程中的某些內容顯然也無法產生預期的結果。)最初的開發人員只用了大約2個小時就弄清了這一點。 一旦我說服他只保存了原始字符串並在調用轉換之前加載了該字符串,一切就會按預期進行。 難怪我覺得某些客戶端處理無法正常工作。
多虧了所有人的講話,使我朝着正確的方向看待腳本作家。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.