0
我試圖分裂基於以下規則除了各種HTML文檔:文件()函數 - 寫出muliple文件與分組內容
- 對於任何
<h3>
,創建一個新文檔與基於文件名在<h3>
的內容(一些翻譯更換不需要字符) - 對於每個
li
那是h3
的following-sibling::ol
的孩子,創建一個包含<li>
的內容,包括任何兒童step
元素 - 複製,未來
<ol>
之前發生到<info>
元件,其在第2
因此創建的<step>
元件的以下同胞的<ol>
的任何following-sibling
,我有以下輸入文檔(這可能是有點多,我試圖簡化爲盡我所能):
<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>
期望的結果是三個文件:
第一已經由處理較大的變換:
<?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
觸發在源文件中:
<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>
而第三個,由第二個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>
任何幫助非常感謝!
你忘了展現確切想要的結果。請編輯問題並指定此信息。 –
請顯示您的預期輸出文件。 XSLT 2.0是否可用? –
很快添加了所需的結果......這個問題是使用XSLT 1.1的更大轉換的一部分,所以我寧願堅持這一點。 –