我有一个名为“map.xml”的XML,它调用另一个xml“map1.xml”.Map.xml引用了map.xsl。
在XSLT中,我需要编写代码来获取map1.xml中存在的节点值吗?你们中的任何人都可以为此提出解决方案吗?
以下特定于DITA标准的代码
map1.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- code to refer XSLT -->
<map title="DITA Topic Map">
<topicref href="client.xml"/>
</map>
map2.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>
答案 0 :(得分:3)
使用XSLT document()函数看起来像是要走的路。
例如,要获取map2.xml中p元素的内容/值:
<xsl:value-of select="document('map2.xml')/concept/conbody/p"/>
没有在你的例子中测试过这个,但这就是我想要的!
答案 1 :(得分:1)
使用XSLT document()函数访问单独XML文档中的节点。可以找到一个简单的例子(由w3schools.com提供)here。
我是新用户,所以SO阻止我在我的回答中发布第二个链接。这是我能做的最好的事情:XSLT标准对文档()的解释可以在www.w3.org/TR/xslt#document找到。
答案 2 :(得分:1)
我认为,源实际上应该是这样的(引用DTD或模式,而不是样式表):
map.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>
client.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>
使用样本数据,可以得到相同的结果。但是如果你有一个专门的段落元素&lt; myp&gt;从&lt; p&gt;派生,您仍然可以对新元素使用相同的转换。