当使用结果文档()将深度嵌套的XML文档拆分为多个输出文件时,是否有方法重写@href值以指向新文档中的ids?例如,将一本书分割成多个文档,基于每个文档成为一个新文件,命名为book-part/@id。在第1章的输出文件中,第2章的输出文件中可能有指向目标的链接,该链接值过去在单个文件中是相对的。现在,指向另一个文件的链接应该有第2章的文件名,后面跟着#和原始目标值。也有一些更改来生成适当的链接元素(Related),但它是我正试图具体生成的目标值。链接目标模式:outputfilename.xml#原始-filetarget-id
似乎我需要在原始文件中收集每个@rid的值,并在插入文件名之前检查是否目标位于不同的文件中,并根据输出的文件写入输出@document-id。但是,我很难理解如何知道输出文件名,以及XSLT中重写目标的位置。
源xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0">
<book-meta>
<book-id>123.4567890</book-id>
</book-meta>
<body>
<book-part book-part-type="chapter" id="book.123.4567890.ch01">
<book-part-meta>
<title-group>
<title>Chapter 1</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <xref rid="a">link to chapter 1</xref></p>
<p> some text with a <xref rid="b">link to chapter 2</xref></p>
<p id="a">a target id in chapter 1</p>
</body>
</book-part>
<book-part book-part-type="chapter" id="book.123.4567890.ch02">
<book-part-meta>
<title-group>
<title>Chapter 2</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <xref rid="a">link to chapter 1</xref></p>
<p> some text with a <xref rid="b">link to chapter 2</xref></p>
<p id="b">a target id in chapter 1</p>
</body>
</book-part>
</body>
</book>输出book.123.4567890.ch01.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table">
<book-meta>
<book-id>123.4567890</book-id>
</book-meta>
<body>
<book-part book-part-type="chapter" id="book.123.4567890.ch01">
<book-part-meta>
<title-group>
<title>Chapter 1</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <xref rid="a">link to chapter 1</xref></p>
<p> some text with a <related-object document-type="chapter" object-id="book.123.4567890.ch02.xml#b">link to chapter 2</related-object></p>
<p id="a">a target id in chapter 1</p>
</body>
</book-part>
</body>
</book>输出book.123.4567890.ch02.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table">
<book-meta>
<book-id>123.4567890</book-id>
</book-meta>
<body>
<book-part book-part-type="chapter" id="book.123.4567890.ch02">
<book-part-meta>
<title-group>
<title>Chapter 2</title>
</title-group>
</book-part-meta>
<body>
<p> some text with a <related-object document-type="chapter" object-id="book.123.4567890.ch01.xml#a">link to chapter 1</related-object></p>
<p> some text with a <xref rid="b" >link to chapter 2</xref></p>
<p id="b">a target id in chapter 1</p>
</body>
</book-part>
</body>
</book>发布于 2014-03-08 22:48:25
简单的回答是:是的,你已经正确地理解了你需要做的事情。
对于每个超链接,您需要弄清楚它的目标是在与链接源相同的输出文件中,还是在不同的输出文件中。您已经正确地确定了这里的挑战:知道新的文件名是什么。这并不像一开始看上去那么困难,只是深吸一口气,把它解决。
您位于xref元素;它有一个rid属性。您想知道: xref和目标是在同一个输出文件中还是在不同的输出文件中?要决定这个,你必须
id(@rid)),然后从该元素提升到包含图书的部分,并确定其文件名将是什么。将此值放入变量(fn-rid)中。我猜您不需要帮助将这种散文描述转换为XSLT,但是如果需要的话,请大声说出来。
https://stackoverflow.com/questions/22275182
复制相似问题