高手帮忙:外部xml文件节点的有条件提取问题.

大可山人
博客专家认证
2004-04-09 04:56:36
News.xml文件中有这样一个节点:
<Root>
<News>
....

<NewsFrom>人民网</NewsFrom>
....
</News>
....
</Root>

另一外部NewsSource.xml文件中有:
<?xml version="1.0" encoding="gb2312"?>
<Root>
<NewsSource>
<NewsSourceID>2</NewsSourceID>
<NewspaperOffice>新华社</NewspaperOffice>
<WebSite>新华网</WebSite>
<Url>http://www.xinhua.org</Url>
<SortID>2</SortID>
</NewsSource>
<NewsSource>
<NewsSourceID>1</NewsSourceID>
<NewspaperOffice>人民日报</NewspaperOffice>
<WebSite>人民网</WebSite>
<Url>http://www.peopledaily.com.cn</Url>
<SortID>1</SortID>
</NewsSource>
</Root>

现在需要提取NewsFrom的链接:类似
<a href="http://www.peopledaily.com.cn">人民网</a>
如何做?
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssm1226 2004-04-09
  • 打赏
  • 举报
回复
:)
大可山人 2004-04-09
  • 打赏
  • 举报
回复
解决了:
<a href="{$strNewsSource//Url[preceding-sibling::WebSite=$sNewsFrom]}">
<xsl:value-of select="$strNewsSource//WebSite[text()=$sNewsFrom]"/>
</a>

原来将"WebSite"写成了"Website"!
晕!
大可山人 2004-04-09
  • 打赏
  • 举报
回复
<xsl:template match="NewsFrom" mode="News">
新闻来源:
<xsl:variable name="sNewsFrom">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:variable name="strNewsSource" select="document('../NewsSource/NewsSource.xml')"/>
<!--这样做不行:-->
<xsl:for-each select="$strNewsSource/NewsSource/Url">
<xsl:if test="preceding-sibling::text()=$sNewsFrom">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
<!--这样做也不行:-->
<a href="{$strNewsSource//Url[preceding-sibling::Website=$sNewsFrom]}">
<xsl:value-of select="$strNewsSource//WebSite[text()=$sNewsFrom]"/>
</a>
</xsl:template>
大可山人 2004-04-09
  • 打赏
  • 举报
回复
这样做时:
<xsl:template match="NewsFrom" mode="News">
新闻来源:
<xsl:variable name="sNewsFrom">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:variable name="strNewsSource" select="document('../NewsSource/NewsSource.xml')"/>
<a href="{$strNewsSource//Url}">
<xsl:value-of select="$strNewsSource//WebSite[text()=$sNewsFrom]"/>
</a>
<xsl:call-template name="Url">
<xsl:with-param name="strNewsFrom" select="$sNewsFrom"/>
<xsl:with-param name="strNewsSource" select="document('../NewsSource/NewsSource.xml')"/>
</xsl:call-template>

</xsl:template>

<xsl:template name="Url">
<param name="strNewsFrom"/>
<param name="strNewsSource"/>
<xsl:if test="$strNewsSource//Url[text()=$strNewsFrom]">
<a href="{$strNewsSource//Url[text()=$strNewsFrom]}">
<xsl:value-of select="$strNewsSource//WebSite[text()=$sNewsFrom]"/>
</a>
</xsl:if>
</xsl:template>

报错:
--------------------
无法解析到变量或参数 'strNewsFrom'的引用。变量或参数可能没有被定义,或它可能不在范围内。
--------------------

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧