0

我有一个名为“map.xml”的 XML,它调用另一个 xml“map1.xml”。Map.xml 引用了 map.xsl。

在 XSLT 中,我需要编写代码来获取 map1.xml 中存在的节点值吗?你们中的任何人都可以为此提出解决方案吗?

以下代码特定于 DITA 标准

地图1.xml:

    <?xml version="1.0" encoding="UTF-8"?>
       <!-- code to refer XSLT -->
          <map title="DITA Topic Map">
  <topicref href="client.xml"/>
       </map>

地图2.xml:

    <?xml version="1.0" encoding="UTF-8"?>
     <concept id="map2">
 <title>Client Rights</title>
 <conbody>
  <p>Part of your job as a healthcare provider.</p>
 </conbody>
       </concept>
4

3 回答 3

3

使用 XSLT document() 函数看起来像是要走的路。

例如,要获取 map2.xml 中 p 元素的内容/值:

<xsl:value-of select="document('map2.xml')/concept/conbody/p"/>

尚未在您的示例中对此进行测试,但这就是我要尝试的方法!

于 2013-02-15T15:46:39.733 回答
1

使用 XSLT document() 函数访问单独 XML 文档中的节点。可以在此处找到一个简单的示例(由 w3schools.com 提供) 。

我是新用户,所以 SO 阻止我在答案中发布第二个链接。这是我能做的最好的事情:XSLT 标准对 document() 的解释可以在 www.w3.org/TR/xslt#document 找到。

于 2010-12-23T15:28:52.763 回答
1

我认为,源代码实际上应该是这样的(参考 DTD 或模式,而不是样式表):

地图.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map title="DITA Topic Map">
  <topicref href="client.xml"/>
</map>

客户端.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="client.xml">
 <title>Client Rights</title>
 <conbody>
  <p>Part of your job as a healthcare provider.</p>
 </conbody>
</concept>

大卫的建议是正确的,它给你以下结果:

Part of your job as a healthcare provider.

对此进行改进:要利用 DITA 的专业化功能,您宁愿使用以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">

<xsl:output omit-xml-declaration="yes"/>

<xsl:template match="*[contains(@class, ' map/topicref ') and @href]">
    <xsl:variable name="topic" select="document(@href, .)"/>
    <xsl:value-of select="$topic//*[contains(@class, ' topic/p ')]"/>
</xsl:template>

</xsl:stylesheet>

使用样本数据,这会导致相同的结果。但是,如果您有一个从 <p> 派生的专用段落元素 <myp>,您仍然可以对新元素使用相同的转换。

于 2013-02-15T20:31:37.970 回答