0

私の目標は、属性に一致する値に基づいて通知をフィルタリングすることです。'privileges'次のようにparamとして入力されるxmlがあります

<privileges>
   <privilege>Access my notices</privilege>
   <privilege>Access draft notices</privilege>
   <privilege>Place notice</privilege>
   <privilege>Access published notices</privilege>
   <privilege>Place notice of type:2903</privilege>
 <privilege>Place notice of type:2413</privilege>
 <privilege>Place notice of type:2803</privilege>
   <privilege>Access pending notices</privilege>
   <privilege>Access my account</privilege>
   <privilege>Place legacy notice</privilege>
   <privilege>Access my searches</privilege>
</privileges>

2413, 2803ここでは、などの数字[通知IDのことです]があります。

そして、私のxml入力は

<notice-taxonomy> 
<notice-type code="11" level="category" name="State" popular="true" service-key="all-notices" sort="01"> 
<notice-type code="1101" level="notice" name="Proclamations" sort="01"/> 
<notice-type code="2803" level="notice" name="Royal Family" sort="02"/> 
<notice-type code="1103" level="notice" name="Appointments to the Royal Household" sort="03"/> 
<notice-type code="1104" level="notice" name="Loyal Addresses" sort="04"/> 
<notice-type code="2413" level="notice" name="Honours and Awards" sort="05"/> 
<notice-type code="1106" level="notice" name="Privy Council Office" sort="06"/> 
<notice-type code="2413" level="notice" name="Change of Name and/or Arms" sort="07"/> 
<notice-type code="1108" level="notice" name="Crown Office" sort="08"/> 
<notice-type code="1109" level="notice" name="Duchy of Cornwall or Duchy of Lancaster" sort="09"/> 
</notice-taxonomy>

そして私のxsltは

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:param name="privileges" as="node()" select="doc('privileges.xml')"/>

   <xsl:variable name="codeps" select="substring-after($privileges//privilege, ':')"/> 

  <xsl:output encoding="UTF-8" indent="yes"/>

 <xsl:template match="/">
      <xsl:apply-templates/>
 </xsl:template>

<xsl:template match="notice-taxonomy">
  <notice-taxonomy>
    <xsl:for-each-group select="notice-type" group-by="@code = $codeps">

      <xsl:sequence select="." />

    </xsl:for-each-group>
  </notice-taxonomy>
</xsl:template>

</xsl:stylesheet>

codeparam 値 [から抽出された数値] に一致する属性が何であれpreveliges、それらnotice-typeを出力にリストするだけで済みます。

たとえば、2803 と一致する場合、出力は次のようになります。

<notice-taxonomy> 
 <notice-type code="2803" level="notice" name="Royal Family" sort="02"/> 
<notice-type code="2803" level="notice" name="Change of Name and/or Arms" sort="07"/> 

</notice-taxonomy>

一致する場合2413

<notice-taxonomy> 
 <notice-type code="2413" level="notice" name="Royal Family" sort="02"/> 
<notice-type code="2413" level="notice" name="Change of Name and/or Arms" sort="07"/> 
</notice-taxonomy>

両方が一致する場合、

<notice-taxonomy> 
 <notice-type code="2803" level="notice" name="Royal Family" sort="02"/> 
<notice-type code="2803" level="notice" name="Change of Name and/or Arms" sort="07"/> 
<notice-type code="2413" level="notice" name="Crown Office" sort="08"/> 
<notice-type code="1413" level="notice" name="Duchy of Cornwall or Duchy of Lancaster" sort="09"/> 
</notice-taxonomy>

アイデアを教えてください。ありがとう

4

1 に答える 1