- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
由于我现在花了几乎一整天的时间来调试这个问题,我希望能够对以下问题获得一些有值(value)的见解:
我正在输入文档上运行 XSL 转换,我的样式表加载一个外部 XML 文档,其中包含我需要进行一些比较的查找值。我正在加载外部文档,如下所示:
<xsl:variable name="dictionary"
select="document('myDict.xml', document(''))/path/to/LookupElement" />
LookupElement
是一个包含我需要访问的完整 XML 片段的元素。在整个样式表中,各种比较表达式都在访问$dictionary
。现在,发生的情况是,使用 Xalan(2.7.?,最新版本,从 Apache 网站下载,而不是 JRE 中包含的版本)使用此 document()
函数调用进行转换大约需要 12 (!) 分钟。
没有 document()
调用(并且没有我访问 $dictionary
中的数据的比较)的相同样式表可在几秒钟内完成。
使用 Saxon-B 9.1.0.8 的相同样式表也可以在几秒钟内完成。
信息:外部文档有 25MB(!),我不可能减小其大小。我正在 JRE 6 下使用 ant 的 xslt-Task 运行转换。
我不确定这是否与上述问题有关:在我的样式表中,我有一些表达式用于测试外部 XML 文档中某些属性是否存在。无论属性是否存在,这些表达式始终计算结果为true
:
<xsl:variable name="myAttExists" select="boolean($dictionary/path/to/@myAttribute)"/>
我已经无计可施了。我知道 Xalan 正确读取文档,所有引用都转到 $dictionary
,因此我不会多次调用 document()
。
有人有想法吗?
编辑:
我已从外部 XML 文档中删除了对 XML 架构的引用,以防止对 Xalan 或底层 (Xerces) 解析器进行架构查找。
编辑:
我已经验证 myAttExists
将始终为true
,即使指定的属性名称肯定不存在于整个外部 XML 文档中。我什至将上面的表达式更改为:
<xsl:variable name="myAttExists" select="count($dictionary/path/to/@unknownAttribute) != 0"/>
仍然产生true
。
编辑:
出于测试目的,我删除了对 document()
函数的调用以及对 $dictionary
的所有引用。这将 Xalan 的转换运行时间减少到 16 秒。
编辑:
有趣的细节:Oxygen 12.1 附带的 Xalan 版本可在几秒钟内完成外部 XML 文档的加载。然而,它也错误地评估了属性的存在...
编辑:
我有以下变量声明,它总是产生true
:
<xsl:variable name="expectedDefaultValueExists">
<xsl:choose>
<xsl:when test="@index">
<xsl:value-of select="boolean($dictionary/epl:Object[@index = $index]/@defaultValue)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="boolean($dictionary/epl:Object[@index = $index]/epl:SubObject[@subIndex = $subIndex]/@defaultValue)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
这在 XSLT/XPath 1.0 中可能吗? $index
和 $subIndex
是根据上下文节点的 @index
和 @subIndex
属性计算的。我想从具有相同索引和/或 subIndex 的外部 XML 文档加载 defaultValue
属性。是否可以在 XPath 1.0 的谓词中使用变量?这适用于 XPath 2.0。关于不正确的变量分配,我不再相信解析器(Xalan)问题,因为 PHP 的 XSLTProcessor 也是这样做的。肯定是变量声明的问题...
最佳答案
这仅回答了问题的最后一部分,但它对于评论来说太笨拙了......
I have the following variable declaration which always yields true when used as the
test
of anxsl:if
orxsl:when
:
<xsl:variable name="expectedDefaultValueExists">
<xsl:choose>
<xsl:when test="@index">
<xsl:value-of select="boolean($dictionary/epl:Object[@index = $index]/@defaultValue)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="boolean($dictionary/epl:Object[@index = $index]/epl:SubObject[@subIndex = $subIndex]/@defaultValue)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
在 XSLT 1.0 中,具有主体而不是 select
的变量始终成为“结果树片段”,在本例中,具有单个文本节点子节点,该子节点将根据需要包含字符串“true”或“false”。任何非空 RTF 在转换为 boolean 值时都被视为true。
在 XSLT 2.0 中,这是一个类似的故事 - 2.0 不区分节点集和结果树片段,但变量仍然是一个“临时树”,具有单个文本节点子节点,其值为字符串“true”或“false”,并且当转换为 boolean 值时,这两个树都是true。如果您想从变量中获取实际的 boolean 值,那么您需要更改两件事 - 将 as="xs:boolean"
添加到变量声明中并使用 xsl:sequence
而不是 xsl:value-of
:
<xsl:variable name="expectedDefaultValueExists" as="xs:boolean">
<xsl:choose>
<xsl:when test="@index">
<xsl:sequence select="boolean($dictionary/epl:Object[@index = $index]/@defaultValue)"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="boolean($dictionary/epl:Object[@index = $index]/epl:SubObject[@subIndex = $subIndex]/@defaultValue)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
xsl:value-of
指令将其 select
的结果转换为字符串,并构造一个包含该字符串的文本节点。 xsl:sequence
指令只是直接从 select
返回值,无论它是什么类型。
但是有更简单的方法可以实现同样的目的。在 XPath 2.0 中,您可以直接在 XPath 中执行 if/then/else 构造
<xsl:variable name="expectedDefaultValueExists"
select="if (@index)
then $dictionary/epl:Object[@index = $index]/@defaultValue
else $dictionary/epl:Object[@index = $index]/epl:SubObject[@subIndex = $subIndex]/@defaultValue" />
在 1.0 中,你需要更有创意
<xsl:variable name="expectedDefaultValueExists"
select="(@index and $dictionary/epl:Object[@index = $index]/@defaultValue)
or (not(@index) and $dictionary/epl:Object[@index = $index]/epl:SubObject[@subIndex = $subIndex]/@defaultValue)" />
关于java - Xalan 和 document() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24735667/
我正在尝试计算 iFrame 的高度,但不明白为什么 document.body.offsetHeight + document.body.bottomMargin 不等于 document.docu
我正在使用 Node/Mongoose/MongoDB 并尝试构建一个轮询应用程序。一个关键需求是跟踪单个用户对同一民意调查的响应如何随时间变化(他们一遍又一遍地进行同一民意调查)。 我有一个用户模型
首先,我不是普通的博主,我很困惑。如果我的问题不符合要求,请指导我。我会努力改进的。 我已提交 Microsoft Code Review 的 Microsoft CRM 插件。我是 JavaScri
谁能解释为什么使用类似的东西: gci -force "\\computername\c$\users\username\Documents" -recurse 或者 gci -force "\\co
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
这个问题已经有答案了: What is the (function() { } )() construct in JavaScript? (28 个回答) 已关闭 6 年前。 说实话,一开始我以为我可
document.getElementsByTagName("*") 适用于 IE/Firefox/Opera,但不适用于 Chrome 和 Safari。 document.all 适用于 IE/C
这个问题在这里已经有了答案: What is the difference between Document and document in JavaScript? (2 个答案) 关闭 8 年前。
我以某种方式发现将事件监听器添加到文档的行为有点奇怪。虽然向 HTMLElements 添加监听器工作正常,但向文档添加监听器不起作用。但奇怪的是,使用 jQuery 可以让它工作。 那么有人可以解释
谁能告诉我这两个 JavaScript 命令之间的区别? 这两个跨主要浏览器的兼容性是什么?我知道 documentElement 与大多数浏览器兼容。 谢谢 最佳答案 document.docume
什么时候应该使用 document.all 与 document.getElementById? 最佳答案 document.all 是 Microsoft 对 W3C 标准的专有扩展。 getEle
当升级到 react-native 0.61.2 时,这个问题出现了。我做到了从手机中删除了 apk 和自动链接使用 react-native link 然后 react-native run-and
当升级到 react-native 0.61.2 时,这个问题出现了。我做到了从手机中删除了 apk 和自动链接使用 react-native link 然后 react-native run-and
我将收到 tungstenite::Message ,它将包含来自客户端的bson文档。我可以将tungstenite::Message转换为Vec,但是如何在服务器端将其转换回 bson::docu
我这里有一个简单的疑问: 文档对象范围位于浏览器选项卡内:我的意思是如果我设置document.tab1 ='tab1' 在一个浏览器选项卡中 它在其他选项卡中不可用。 但是 document.coo
我经常使用并看到推荐的 dom 访问结构,例如这样动态地将内容添加到页面: loader = document.createElement('script'); loader.src = "myurl
我对 JQuery 还很陌生。我正在使用this JQuery 函数在元素上显示工具提示。 我根据我的需要(在这个社区的帮助下)以这种方式编辑了代码: $(document).ready(functi
我想知道哪个是运行js代码的正确方法,该代码根据窗口高度计算垂直菜单的高度并按时设置,不晚不早。 我正在使用 document.ready 但它并没有真正帮助我解决这个问题,它有时没有设置,我必须重新
我正在浏览一个 js 文件并发现这个声明var dataobj=document.all? document.all.id_name : document.getElementById("id_nam
想知道何时使用,这适用于什么浏览器? if (document.all&&document.getElementById) { // Some code block } 最佳答案 我认为没有任何重要的
我是一名优秀的程序员,十分优秀!