- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
编辑:我也可以访问 ESXLT功能。
我有两个字符串标记节点集。一组包含如下值:
/Geography/North America/California/San Francisco
/Geography/Asia/Japan/Tokyo/Shinjuku
另一组包含如下值:
/Geography/North America/
/Geography/Asia/Japan/
我的目标是找到两者之间的“匹配”。当第 1 组中的任何字符串以第 2 组中的字符串开头时进行匹配。例如,将在 /Geography/North America/California/San Francisco 和 /Geography 之间进行匹配/北美/ 因为第 1 组中的字符串以第 2 组中的字符串开头。
我可以通过使用第三方扩展来比较使用通配符的字符串。我还可以在 Xpath 中全部使用正则表达式。
我的问题是如何构建 Xpath 以使用两组所有节点之间的函数进行选择? XSL 也是一个可行的选择。
这个 XPATH:
count($set1[.=$set2])
会产生 set1 和 set2 之间的交集计数,但这是一对一的比较。是否可以使用其他方式比较节点?
编辑:我确实成功了,但我通过使用其他一些第三方扩展来作弊来获得相同的结果。我仍然对其他方法感兴趣。
最佳答案
这个:
<xsl:variable name="matches" select="$set1[starts-with(., $set2)]"/>
将 $matches
设置为包含 $set1
中每个节点的节点集,其文本值以 $set2 中节点的文本值开头。这就是您要找的,对吧?
编辑:
好吧,我只是错了。原因如下。
starts-with
期望它的两个参数都是字符串。如果不是,它将在评估函数之前将它们转换为字符串。
如果你给它一个节点集作为它的参数之一,它使用节点集的字符串值,这是集合中第一个节点的文本值。所以在上面,$set2
永远不会被搜索;只有列表中的第一个节点会被检查,因此谓词只会在 $set1
中找到以 $set2
中第一个节点的值开头的节点。
我被误导了,因为这个模式(我最近几天一直在使用它)确实有效:
<xsl:variable name="hits" select="$set1[. = $set2]"/>
但该谓词使用的是节点集之间的比较,而不是文本值之间的比较。
实现此目的的理想方法是嵌套谓词。也就是说,“我想找到 $set1
中的每个节点,$set2
中有一个节点的值以...开头”,这就是 XPath 崩溃的地方。从什么开始?你想写的是这样的:
<xsl:variable name="matches" select="$set1[$set2[starts-with(?, .)]]"/>
只是没有可以为 ?
编写的表达式,它会返回当前由外部谓词测试的节点。 (除非我遗漏了一些非常明显的东西。)
要得到你想要的,你必须单独测试每个节点:
<xsl:variable name="matches">
<xsl:for-each select="$set1">
<xsl:if test="$set2[starts-with(current(), .)]">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
这不是一个非常令人满意的解决方案,因为它的计算结果是一个结果树片段,而不是一个节点集。如果要在 XPath 表达式中使用变量,则必须使用扩展函数(如 msxsl:node-set
)将 RTF 转换为节点集。
关于xml - XPATH 或 XSL 使用自定义比较来匹配两个节点集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/269989/
我知道这可能看起来像一个愚蠢/新手问题,但我对 XSLT 还很陌生(尽管我开始接受它并了解它的功能)。 什么时候适合使用xsl:if,什么时候适合使用xsl:choose/xsl:when? 当我想要
在根据节点是否存在设置变量后,我尝试输出变量的文字字符串值。我认为条件检查逻辑是正确的。但它没有输出值... su
我目前正试图使用 XSL 将 XML 文档转换为 HTML。 XML 文档使用 namespace ,我对 XSL 并没有太多经验,更不用说 namespace 了。基本上我想做的就是抓取 s:t
你能否在嵌套的 xsl:when 中嵌套 xsl:if,例如:
我正在 W3Schools 上使用 XSLT 代码示例:https://www.w3schools.com/xml/xsl_client.asp 我有这部分代码在 IE 中使用基本的 xslt 处理.
我正在尝试从 XSLT 样式表动态生成 XSLT 文档。原则上这当然有效,但我没有让命名空间工作。我想让生成的 XSLT 元素以“xsl”前缀为前缀: 而不是 我玩过 xsl:element 的
我们客户的要求是提供带圆角的 PDF 表格。我只有 Apache FOP 处理器可供我使用,它不支持圆角属性。它也不支持 float ,因此无法向左和向右 float 圆形图像。 你对如何做到这一点有
我有一个关于 xsl 的问题。我有 1 个巨大的 xsl 文件(+4000 行 :p),我想将文件分成不同的部分。我使用 xsl 文件来映射 BizTalk 中的一些架构,如果我将它分成几部分,它的性
我的 FO 流程有问题,因为在一页上,标题显示在一页的末尾并在之后的页面上继续。如何向 title-element 添加属性,以便标题始终显示在同一页面上,这意味着:没有分页符。 谢谢! /丹尼 最佳
我想知道是否有人可以帮助我或指出正确的方向。我目前有从 XML 文件返回正确的元素有些麻烦。我只是尝试获取我拥有的大型 XML 文件的精简版本,以便输出另一个 XML 文件(不是很多教程都在使用的 H
我想动态创建具有动态名称的变量以供以后在我的转换中使用,但为此我需要动态生成 XSL,然后在同一脚本中运行它。 这只是我正在寻找的粗略伪代码示例。
我正在学习 XML 以及如何使用 XSL 文件。在 XSL 文件中,我发现了以下术语: xsl:template match="/" 这代表什么?我可以用什么代替 /?我可以编写 table 或任何其
是否可以将 xsl: 放到 XSL 样式表中的 XSL 标签? 例如,可以: 输入为: 编辑:样式表中包含 HTML 和 XML 节点。 谢谢,罗斯 最佳答案 实际上,您可以通过将 XSLT(“h
有什么办法不离开后第一 匹配但继续检查其他条件? 最佳答案 我相信这是一个不。正如规范所说: The content of the first, and only the first, xsl:whe
在构建 XSL 文档时,我遇到了以下问题。我想保留原文中的换行符,所以我设置了linefeed-treatment="preserve" .然而,这显然也意味着它保留了文本内容之外和实际 xml 元素
我有一个 XSL 样式表,我需要使用 xsl:function 添加一些自定义字符串操作。但是我在尝试找出在我的文档中放置该函数的位置时遇到了麻烦。 我的 XSL 简化看起来像这样,
我有以下 XML: Picture 1 Picture 2 Picture 3 虽然此 XSL 执行了预期的操作(输出第一张图片的属性):
我希望 column-count="2"只出现在页面的某些部分。 ]>
我正在为我的 XML 内容生成 xsl-fo 文档,然后将此内容传递给将生成 PDF 的第三方 DLL 之一。我需要以 45 度角显示测试。如何实现这一目标? 谢谢 最佳答案 我很确定您不能在纯 XS
在我的情况下,我必须在两个表格行之间提供高达 0.5cm 的空间。我怎样才能做到这一点。 代码:: 我用过了:
我是一名优秀的程序员,十分优秀!