我有一个匹配某些属性的XSLT,并将它们放在不同的命名空间中.这是一个简化版本:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:test:ns1"
xmlns:ns2="urn:test:ns2">
<xsl:output method="xml" indent="no" encoding="UTF-8"/>
<!-- copy all nodes -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[starts-with(local-name(), 'test-')]">
<xsl:attribute name="ns2:{substring-after(local-name(), '-')}" namespace="urn:test:ns2">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
这是一些示例输入:
<?xml version="1.0" encoding="UTF-8" ?>
<hello-world
xmlns="urn:test:ns1"
xmlns:ns3="urn:test:ns3"
rootAttr="stays in implicit namespace"
ns3:passMe="stays in the ns3 namespace"
test-someRootAttr="goes into the ns2 namespace, pulls up ns declaration">
<test
defaultAttr="stays in implicit namespace"
test-someAttr="goes into the ns2 namespace"
ns3:namedAttr="stays in the ns3 namespace">
Something …Run Code Online (Sandbox Code Playgroud) 我有可能有一个HTML文档<,并>在某些属性.我试图提取它并通过XSLT运行它,但XSLT引擎错误告诉我<在属性内部无效.
我做了一些挖掘,发现它在源文档中被正确转义,但是当它通过innerHTMLDOM 加载到DOM中时,DOM 就不会对属性进行编码.奇怪的是,它这样做的<和>,而不是一些人喜欢&.
这是一个简单的例子:
var div = document.createElement('DIV');
div.innerHTML = '<div asdf="<50" fdsa="&50"></div>';
console.log(div.innerHTML)Run Code Online (Sandbox Code Playgroud)
我假设DOM实现决定HTML属性可以不如XML属性严格,并且这是"按预期工作".我的问题是,如果不写一些可怕的正则表达式替换,我可以解决这个问题吗?
我经常使用以下模式来创建省略null/undefined属性的对象:
const whatever = {
something: true,
...(a ? { a } : null),
...(b ? { b } : null),
};
Run Code Online (Sandbox Code Playgroud)
从流程版本 v0.112 开始,这会导致错误消息:
由于条件 [2] 和条件 [3] 都是联合,因此计算对象字面量 [1] 可能会导致大量情况下进行推理。请为每个价差使用最多一种联合类型以简化对价差结果的推理。您可以通过指定捕获联合的所有分支的更通用的类型来摆脱联合。
在我看来,这并不是真正的类型错误,只是 Flow 试图避免一些繁重的计算。这导致我的项目中出现了数十个流程错误,我需要以某种方式解决这些错误。是否有一些优雅的方法可以为这些提供更好的类型信息?我不想修改代码的逻辑,我相信它会按照我需要的方式工作(除非有人在这里也有更优雅的解决方案)。在我诉诸// $FlowFixMe所有这些之前,先在这里询问。