次のルールに基づいて、さまざまな HTML ドキュメントを分割しようとしています。
- の
<h3>
内容に基づいたファイル名で新しいドキュメントを作成します<h3>
(不要な文字を置き換えるために翻訳を加えます)。 li
の の子であるごとfollowing-sibling::ol
に、その のコンテンツ (すべての子を含む) を含む要素をh3
作成します。step
<li>
- 2 で作成した要素の次の兄弟である要素の次の前にあるいずれか
following-sibling
をコピーします。<ol>
<ol>
<info>
<step>
したがって、次の入力ドキュメントがあります (これは少し多いかもしれません。できる限り単純化しようとしました)。
<body>
<h2><a name="BK_Admin_User_Top" id="BK_Admin_User_Top"></a><b>Page title</b></h2>
<p>Page content.</p>
<p class="Intro">What do you want to do?</p>
<p class="indent-intro hcp1 c1">
<a href="#Admin_User_New">add a new user</a>
</p>
<p class="indent-intro hcp1 c1">
<a href="#_Admin_User_Edit" class="hcp2">change an existing user</a>
</p>
<p class="indent-intro hcp1 c1">
<a href="#_Admin_User_Delete" class="hcp2">delete a user</a>
</p>
<h3><a name="_Admin_User_New" id="_Admin_User_New"></a>Adding a User</h3>
<ol start="1" type="1">
<li class="p-listLevelOne">
<p class="listLevelOne">From the
<span class="bold">Maintenance</span> folder on the menu tree, click
<span class="bold"> Admin Users</span>. </p>
</li>
</ol>
<p class="SANote hcp3 c2">
<img src="image45.gif" alt="" width="17" height="16" border="0" class="hcp4" />  If you are a system administrative user, a Group tab and a tab for you to enter or select a group and for the administrative unit and user precede the Admin Unit tab for all procedures.</p>
<p class="BGNote">
<i class="hcp3">
<span class="c3">
<span>
<img src="image45.gif" alt="" width="17" height="16" border="0" class="hcp4" />
</span>  If you are a group user, a</span>
<span class="c3">tab for you to enter or select the for the administrative unit and user precedes the Admin Unit</span></i>
<i>
<span class="c3">tab for all procedures.</span>
</i></p>
<ol start="2" type="1">
<li class="p-listLevelOne">
<p class="listLevelOne">Do one of the following:</p>
</li>
<li class="p-listSubBullet">
<p class="listSubBullet">Enter the ID of administrative unit of the user you want to add in the Admin Unit ID field and click
<b>NEXT</b>.</p>
</li>
</ol>
<h3>
<a name="_Admin_User_Edit" id="_Admin_User_Edit"></a>Changing a User</h3>
<ol>
<li class="p-listLevelOne">
<p class="listLevelOne c6">From the
<b>Maintenance</b> folder on the menu tree, click
<b> Admin Users</b>. The Admin User Maintenance dialog is displayed with the Admin Unit tab.</p>
</li>
</ol>
<p class="SANote c6">
<span class="hcp8 hcp3 c11">
<img src="image45.gif" alt="" width="17" height="16" border="0" class="hcp4" />  If you are a system administrative user, a Group tab and a tab for you to enter or select a group and for the administrative unit and user precede the Admin Unit tab for all procedures.</span>
</p>
<p class="BGNote">
<i class="hcp3">
<span class="c3">
<span>
<img src="image45.gif" alt="" width="17" height="16" border="0" class="hcp4" />
</span>  If you are a group user, a</span>
<span class="c3">tab for you to enter or select the for the administrative unit and user precedes the Admin Unit</span></i>
<i>
<span class="c3">tab for all procedures.</span>
</i></p>
<ol start="2" type="1">
<li class="p-listLevelOne">
<p class="listLevelOne">Do one of the following:</p>
</li>
<li class="p-listSubBullet">
<p class="listSubBullet c6">Enter the ID of administrative unit of the user you want to modify in the
<b>Admin Unit ID</b> field and click
<b>NEXT</b>.</p>
</li>
<li class="p-listSubBullet">
<p class="listSubBullet c6">Click
<b>SEARCH</b> to display a list of administrative units to select from. Select the one you want and click
<b>NEXT</b>. You can filter the list by entry in either or both the
<b>Admin Unit ID</b> and
<b>Admin Unit Name</b> fields.</p>
</li>
</ol>
<p class="indent hcp9 c7">The Admin User
<span class="c12">tab is displayed.</span></p>
<ol start="3" type="1">
<li class="p-listLevelOne">
<p class="listLevelOne hcp12 c7">
<span class="hcp8">Do one of the following:</span>
</p>
</li>
<li class="p-listSubBullet">
<p class="listSubBullet hcp9 c7">Enter the ID of the user that you want to modify in the
<b>User ID</b> field and click
<b>EDIT</b>.</p>
</li>
<li class="p-listSubBullet">
<p class="listSubBullet c6">Click
<b>SEARCH</b> to display a list of users to select from. Select the one you want and click
<b>EDIT</b>. You can filter the list by entry in either or both the
User ID and
User Name fields.</p>
</li>
</ol>
<p class="indent hcp9 c7">
<span class="c12">The Admin User Details</span>
<span class="c12">tab is displayed with the current values for the selected user.</span></p>
<ol start="4">
<li class="p-listLevelOne">
<p class="listLevelOne c6">Change the current data as needed.</p>
</li>
</ol>
<p class="listLevelOne hcp3 c13">
<span class="c3">
<img src="image45.gif" alt="" width="17" height="16" border="0" class="hcp4" />
</span>  To reset the user's password, click PASSWORD.  The initial password is system generated and then displayed in the Password field.</p>
<ol start="5">
<li class="p-listLevelOne">
<p class="listLevelOne hcp9 c7">If needed at any point, click
<b>RESET</b> to return the fields to the last saved values.</p>
</li>
<li class="p-listLevelOne">
<p class="listLevelOne hcp9 c7">Click
<b>APPLY</b>. The changes are made to the database.</p>
</li>
<li class="p-listLevelOne">
<p class="listLevelOne hcp9 c7">Click
<b>CLOSE</b> to end the maintenance session.</p>
</li>
</ol>
</body>
私の変換は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<!-- identity template -->
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:key name="kFollowing" match="*[preceding-sibling::h3]"
use="generate-id(preceding-sibling::h3[1])"/>
<xsl:template match="h3[preceding::p[@class='Intro']]" priority="10">
<xsl:variable name="yeti-title">
<xsl:value-of select="normalize-space(.)"/>
</xsl:variable>
<xsl:variable name="title_filename">
<xsl:value-of select="translate($yeti-title,' /.()�?','___')"/>
</xsl:variable>
<xsl:variable name="newfilename">
<xsl:value-of select="concat('done\',generate-id(.),'_',$title_filename,'.dita')"/>
</xsl:variable>
<xsl:document href="{$newfilename}" method="xml">
<task>
<xsl:attribute name="id">
<xsl:value-of select="$title_filename"/>
</xsl:attribute>
<title>
<xsl:value-of select="$yeti-title"/>
</title>
<taskbody>
<context>
<draft-comment>This topic was automatically generated. Its parent topic is "<xsl:value-of select="/descendant::title[1]"/>."</draft-comment>
</context>
<steps>
<xsl:variable name="h3-id" select="generate-id(.)"/> x
<xsl:for-each select="li[key('kFollowing',$h3-id]">
<step>
<cmd>
<xsl:value-of select="."/>
</cmd>
<xsl:if test="following-sibling::li[1][@class='p-listSubBullet']">
<info>
<ul>
<xsl:for-each select="following-sibling::li[@class='p-listSubBullet']">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</info>
</xsl:if>
</step>
</xsl:for-each>
</steps>
</taskbody>
</task>
</xsl:document>
</xsl:template>
望ましい結果は、次の 3 つのドキュメントです。
最初のものは、より大きな変換によって既に処理されています。
<?xml version="1.0" encoding="UTF-8"?>
<task>
<title>Page title</title>
<taskbody>
<context>
<p>What do you want to do?</p>
<p><xref href="{generated href value}"/></p>
<p><xref href="{generated href value}"/></p>
<p><xref href="{generated href value}"/></p>
</context>
</taskbody>
</task>
h3
ソース ドキュメントの最初のドキュメントによってトリガーされた 2 番目のドキュメント:
<task>
<title>Adding a User</title>
<steps>
<step><cmd>From the <uicontrol>Maintenance</uicontrol> folder on the
menu tree, click <uicontrol> Admin Users</uicontrol>.</cmd>
<info><note>If you are a system administrative user, a
Group tab and a tab for you to enter or select a group and for the
administrative unit and user precede the Admin Unit tab for all procedures.</note>
<note>If you are a group user, a
tab for you to enter or select the for the administrative unit and
user precedes the Admin Unit tab for all procedures.
</note>
</info></step>
<step><cmd>Do one of the following:</cmd>
<info>
<ul>
<li>Enter the ID of administrative unit of the user you want to add in the Admin Unit ID field and click
<uicontrol>NEXT</uicontrol>.
</li>
</ul>
</info></step>
</steps>
</task>
そして、2 番目の によってトリガーされる 3 番目のh3
.
<?xml version="1.0" encoding="UTF-8"?>
<task>
<title>Changing a User</title>
<steps>
<step><cmd>From the
<uicontrol>Maintenance</uicontrol> folder on the menu tree, click
<uicontrol> Admin Users</uicontrol>. The Admin User Maintenance
dialog is displayed with the Admin Unit tab.</cmd>
<info><note> If you are a system administrative user, a Group tab and a
tab for you to enter or select a group and for the administrative unit
and user precede the Admin Unit tab for all procedures.</note>
<note>If you are a group user, a tab for you to enter or select the
for the administrative unit and user precedes the Admin Unit tab for all procedures.</note></info></step>
<step><cmd>Do one of the following:</cmd>
<info>
<ul>
<li>Enter the ID of administrative unit of the user you want to modify in the
<uicontrol>Admin Unit ID</uicontrol> field and click
<uicontrol>NEXT</uicontrol>. </li>
<li>
Click
<uicontrol>SEARCH</uicontrol> to display a list of administrative units to select from. Select the one you want and click
<uicontrol>NEXT</uicontrol>. You can filter the list by entry in either or both the
<uicontrol>Admin Unit ID</uicontrol> and
<uicontrol>Admin Unit Name</uicontrol> fields.
</li>
</ul><p>The Admin User tab is displayed.</p>
</info></step>
<step><cmd>Do one of the following:</cmd>
<info><ul>
<li>Enter the ID of the user that you want to modify in the
<uicontrol>User ID</uicontrol> field and click
<uicontrol>EDIT</uicontrol>.</li>
<li>Click
<uicontrol>SEARCH</uicontrol> to display a list of users to select from.
Select the one you want and click
<uicontrol>EDIT</uicontrol>. You can filter the list by entry in either or both the
User ID and
User Name fields.</li>
</ul>
<p> The Admin User Details
tab is displayed with the current values for the selected user.</p></info>
</step>
<step><cmd>Change the current data as needed.</cmd>
<note>To reset the user's password, click PASSWORD. The initial password is system generated and then displayed in the Password field.</note></step>
<step><cmd>If needed at any point, click
<uicontrol>RESET</uicontrol> to return the fields to the last saved values.</cmd>
</step>
<step><cmd>
Click
<uicontrol>APPLY</uicontrol>. The changes are made to the database.
</cmd></step>
<step><cmd>Click
<uicontrol>CLOSE</uicontrol> to end the maintenance session.</cmd></step></steps>
</task>
どんな助けでも大歓迎です!