我已经为此工作了一段时间,但无法找到任何类型的工作解决方案。所有这些都在 xml 版本 1 中。
第一个名为 dog_info.xml 的文件有这样的内容:
<?xml version"1.0" encoding="UTF-8"?>
<dog_info version="2" dog_num="2" update_time="2013-15-05T14:80:00Z">
<dog_list xml: lang="en">
<dog id="1" name="Nikki" desc="Black with brown spots"/>
<dog id="2" name="Zulu" desc="Oreo color"/>
<dog id="3" name="Tyler" desc="brown dog"/>
<dog id="4" name="Sally" desc="milk color"/>
<dog id="5" name="Joe" desc="brown and grey color"/>
</dog_list>
<dog_list xml:lang="piggylatin">
<dog id="1" name="Nikky" desc="black spots with black and brown spots"/>
<dog id="2" name="apples" desc="green, red or blue apples"/>
<dog id="3" name="Taylor" desc="yellow dog"/>
<dog id="4" name="Susan" desc="a dog"/>
<dog id="5" name="Jason" desc="a cat"/>
</dog_list>
</dog_info>
第二个名为 profile.xml 的文件有这样的东西:
<?xml version="1.0" encoding="UTF-8"?>
<profile>
<animal-helper>
<animal>
<category>
<rule>
<value>1</value>
<deny />
</rule>
<rule>
<value>2</value>
<deny />
</rule>
</category>
</animal>
</animal-helper>
</profile>
第三个文件是我正在写的,但被卡住了。它应该是一个 xsl,我可以将其解析为 html 以显示信息。
profile.xml 的值为 1 并拒绝。如果为deny,则与dog_list.xml中的id进行匹配,获取name和desc。与任何其他否认相同。
没有<allow />
标签,只有<deny />
. 所以 dog_list.xml 中所有其余的 id 都是允许的。并且应该在 html 上列在它自己的类别中。
我还必须注意查看语言是否不是“piggylatin”或“en”,它将默认为“en”。任何帮助将非常感激。
编辑:
实际文件非常大,用于工作。所以我必须重新创建一些类似于我需要让它工作的东西。
我有类似的东西:
...
<xsl:for-each select="$HELPER/animal/category/rule[name=false()]">
<xsl:variable name="currentValue" select="value/text()"/>
<xsl:variable name="dogValue" select="$DOG_LIST"/>
<xsl:for-each select="$dogValue/dog[@id = $currentValue]">
<xsl:apply-templates/><xsl:if test="position() != last()"><xsl:text disable-output-escaping="yes"><![CDATA[<br />]]></xsl:text></xsl:if>
</xsl:for-each>
</xsl:for-each>
...
编辑2:
上面的代码片段是 html 表(拒绝部分)的一部分。它应该看起来像这样:
“否认
”
尼基祖鲁
“允许”
泰勒·
莎莉
·乔
所以“拒绝”找到值 1 和 2,匹配 id 1 和 2,并返回名称。并且“允许”发现 id 3、4、5(因为 1 和 2)被拒绝并返回名称。
该<deny />
元素的目的是挑选出被拒绝的狗并列出它们,然后基于此,将允许其他未被拒绝的“id”。
我写的代码的上述部分将有两个部分。“拒绝”部分和“允许”部分。Allowed 部分必须测试最初没有为<deny />
.