我有一個xslt,我正在使用它從一個XML文件生成html - 工作正常。有一點我需要從另一個XML文件中添加一些附加信息。這兩個xml文件共享一個文件名(另一個文件擴展名中的一個元素中的屬性和一個沒有的屬性),這就是我想要如何在與主要xml文檔相對應的第二個xml文檔中查找信息的方式。XPath匹配列表中的元素使用字符串contant但不與另一個元素的值
的文件看起來像這樣(除去少數幾個元素):
Scenario_Listing.xml
<Scenario_Listing>
<Scenario_List>
<Scenario>
<Title>
<battle_title>Caltagirone H2H</battle_title>
</Title>
<filename>Caltagirone H2H</filename>
<picture_link>scenpics/Caltagirone H2H.bmp</picture_link>
<Map_Size>
<map_area>0.727 Sq. km</map_area>
<map_width>688 m</map_width>
<map_depth>1056 m</map_depth>
</Map_Size>
<region>Italy</region>
</Scenario>
<Scenario>
<Title>
<battle_title>Palma di Montechiaro</battle_title>
</Title>
<filename>Palma di Montechiaro - AI</filename>
<picture_link>scenpics/Palma di Montechiaro - AI.bmp</picture_link>
<Map_Size>
<map_area>0.067 Sq. km</map_area>
<map_width>320 m</map_width>
<map_depth>208 m</map_depth>
</Map_Size>
</Scenario>
</Scenario_List>
</Scenario_Listing>
二級xml文件看起來是這樣的:
Extra_Info.xml
<scenarios>
<scenario author="information unavailable" filename="AD Flak Hunt.btt">
<downloadurls>
<downloadurl who="Battle Front">http://www.battlefront.com/index.php?option=com_remository&Itemid=314&func=fileinfo&id=3036</downloadurl>
</downloadurls>
</scenario>
<scenario author="information unavailable" filename="Palma di Montechiaro - AI.btt" stock="y"/>
</scenarios>
在模板中,我遍歷Sc中的所有Scenario元素enario_List。變量$ extraInfo包含輔助xml文檔,並加載得更早以用於查找其他信息。從模板的代碼片段看起來是這樣的:
<xsl:for-each select="Scenario_List/Scenario">
<xsl:variable name="scenarioExtraInfo" select="$extraInfo/scenarios/scenario[@filename=concat(filename,'.btt')]"/>
<xsl:message>filename element |<xsl:value-of select="filename" />|, concat file extension |<xsl:value-of select="concat(filename, '.btt')" />|</xsl:message>
<xsl:message>just picking the first one |<xsl:value-of select="$extraInfo/scenarios/scenario[1]/@filename" />| look up by string |<xsl:value-of select="$extraInfo/scenarios/scenario[@filename=concat('Palma di Montechiaro - AI', '.btt')]/@filename" />| look up using the filename element |<xsl:value-of select="$extraInfo/scenarios/scenario[@filename=concat(filename,'.btt')]/@filename" />|</xsl:message>
當我處理模板:
saxon9t -s:FortressItaly \方案\ Scenario_Listing.xml -xsl:scenario_campaign_listing.xsl -o:HTML \ FortressItaly \方案\ index.html在gameName = 「山寨意大利」 遊戲= FortressItaly extrainfopath = FortressItaly /場景
我看到這個輸出的條目:
filename element |Palma di Montechiaro - AI|, concat file extension |Palma di Montechiaro - AI.btt|
just picking the first one |AD Flak Hunt.btt| look up by string |Palma di Montechiaro - AI.btt| look up using the filename element ||
我想不通爲什麼當我仰望基於硬編碼字符串 選擇=「$ extraInfo /場景/場景[@文件名= CONCAT(‘帕爾馬迪蒙泰基亞羅 - AI’,‘.btt’)]/@文件名「我得到了預期的結果,但是當我使用元素 的值查找select =」$ extraInfo/scenarios/scenario [@ filename = concat(filename,'.btt')]/@ filename「即使表達式導致相同的文件名字符串。
任何幫助或指導,將不勝感激。
謝謝。我知道在看到解決方案之後,這將是簡單/明顯的事情。當然,XPath需要上下文來知道文件名(或任何其他名稱的含義)。 –