我有以下的XML。
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<file name="FILE_ORD_01.xml"/>
<file name="FILE_ORD_02.xml"/>
<file name="FILE_ORD_03.xml"/>
<file name="FILE_ORD_04.xml"/>
<file name="FILE_ORD_05.xml"/>
</entry>
基本上这是我文件夹中的文件列表 在每个XML文件中都有一个短语。
我还有另一个XML文件,我需要获取phrase
值,将它们与此列表中的短语值进行比较,并在列表中显示此phrase
。
<xsl:variable name="prent">
<xsl:for-each select="document('C:\Users\u0138039\Desktop\Proview\MY\2015\title.xml')/entry/file">
<xsl:value-of select="normalize-space(document(concat('C:\Users\u0138039\Desktop\Proview\MY\2015\',./@name))/chapter[//page/@num=regex-group(1)])"/>
</xsl:for-each>
</xsl:variable>
使用此代码,我可以看到在哪个文件中找到匹配的短语,例如,如果在FILE_ORD_03.xml
中找到匹配我想要打印FILE_ORD_03
这里基本上我想从上面的列表中获取短语所在的文件名并打印其值。使用base-uri()
或直接获取属性值
由于
答案 0 :(得分:1)
我不认为你可以从你的变量中提取值,因为你只有带有规范化字符串值的文本节点,但我认为你想要的东西是
<xsl:variable name="file-names" as="xs:string*"
select="document(document('file:///C:/Users/u0138039/Desktop/Proview/MY/2015/title.xml')/entry/file/@name)/chapter[//page/@name = regex-group(1)]/substring-before(tokenize(document-uri(/), '/')[last()], '.')"/>
将匹配文件的文件名作为字符串序列提取到第二个变量中。