是否可以不显示元素,如display:none,但继续显示:before和/或:after?
我试过了
#myspan {display:none}
#myspan:after {display:inline; content:"*"}
Run Code Online (Sandbox Code Playgroud)
但那没用.我试图让CSS用星号替换span的内容,而不引入jQuery.
在XSLT 1.0中,将当前上下文节点传递给被调用模板并使该节点成为被调用模板内的上下文节点的最短/最干净/推荐方法是什么?
如果一个没有xsl:param并且由空调用模板调用的模板只是拿起调用者的上下文节点,那将是很好的(它会,对吧?),但我能想到的最好的是:
<xsl:call-template name="sub">
<xsl:with-param name="context" select="." />
</xsl:call-template>
Run Code Online (Sandbox Code Playgroud)
同
<xsl:template name="sub">
<xsl:param name="context" />
<xsl:for-each select="$context">
</xsl:for-each>
</xsl:template>
Run Code Online (Sandbox Code Playgroud) 使用XSLT/XPATH 1.0,我想创建HTML,其中元素的class
属性span
指示原始XML层次结构中的深度.
例如,使用此XML片段:
<text>
<div type="Book" n="3">
<div type="Chapter" n="6">
<div type="Verse" n="12">
</div>
</div>
</div>
</text>
Run Code Online (Sandbox Code Playgroud)
我想要这个HTML:
<span class="level1">Book 3</span>
<span class="level2">Chapter 6</span>
<span class="level3">Verse 12</span>
Run Code Online (Sandbox Code Playgroud)
这些div
元素的深度可以先验地知道.在div
小号可能是书- >章.它们可以是Volume - > Book - > Chapter - > Paragraph - > Line.
我不能依赖@type的值.部分或全部可能为NULL.
<merge>
<text>
<div begin="A" end="B" />
<div begin="C" end="D" />
<div begin="E" end="F" />
<div begin="G" end="H" />
</text>
</merge>
Run Code Online (Sandbox Code Playgroud)
我需要一组UNIONed属性节点,按照A,B,C,D,E,F,G,H的顺序,这将工作:
/merge/text/div/@begin | /merge/text/div/@end
Run Code Online (Sandbox Code Playgroud)
但是只有每个@begin都在每个@end之前,因为UNION运算符规定按文档顺序返回节点.(是?)
我需要节点集的顺序相同,即使属性在文档中以不同的顺序出现,如下所示:
<merge>
<text>
<div end="B" begin="A" />
<div begin="C" end="D" />
<div end="F" begin="E" />
<div begin="G" end="H" />
</text>
</merge>
Run Code Online (Sandbox Code Playgroud)
也就是说,我需要元素遵循文档顺序,但每个元素中的属性遵循确定的顺序(由属性名称指定或按字母顺序排列).
这个问题出现在格式化使用 TEI 标记的文本文档 (www.tei-c.org) 中。这超出了我的 XSLT/XPATH 技能。(需要 XSLT/XPATH 1.0 中的解决方案。)
有一个标记元素<lb>
,用于标记换行符。它可以带有一个属性@break
。如果@break="no"
,则<lb>
在生成输出时应忽略文本和周围文本之间的任何空格。
所以
This little tea <lb break="no" />
pot, short and stout.
Run Code Online (Sandbox Code Playgroud)
应该理解为
This little teapot, short and stout.
Run Code Online (Sandbox Code Playgroud)
也就是说,“tea”之后的空格和“pot”之前的换行符不应在输出流中呈现。
对于 之前的空间<lb>
,这可以工作:
<xsl:template match="text()[following-sibling::*[1][self::lb[@break='no']]">
<!-- Do something about the space here. -->
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
类似的东西也适用于<lb>
.
好的。但这更棘手:
This <emph>little <ref>tea </ref> </emph>
<lb break="no" />
pot, short and stout.
Run Code Online (Sandbox Code Playgroud)
现在<ref>
元素内的文本不是<lb>
. 并且需要从输出流中删除</ref>
之前的空间、之前的空间</emph>
和前后的换行符<lb> …
这是XPath返回所有兄弟姐妹的常见请求的变体,直到某些条件,由Dimitre Novatchev在XPath轴上回答特征丰满,得到所有后续节点,直到使用此模式:
$x/following-sibling::p
[1 = count(preceding-sibling::node()[name() = name($x)][1] | $x)]
Run Code Online (Sandbox Code Playgroud)
但是,这种模式依赖的对称性following-sibling
和preceding-sibling
,在沿轴的两个方向看的能力.
轴是否有类似的模式ancestor-or-self
?
例如:
<t>
<a xml:base="/news/" >
<b xml:base="reports/">
<c xml:base="politics/" />
<c xml:base="sports/" >
<d xml:base="reports/" />
<d xml:base="photos/" >
<img url="A1.jpg" />
<img url="A2.jpg" />
</d>
</c>
<c xml:base="entertainment" />
</b>
</a>
</t>
Run Code Online (Sandbox Code Playgroud)
直截了当
<xsl:template match="img">
<xsl:for-each select="ancestor-or-self::*[@xml:base]">
<xsl:value-of select="@xml:base"/>
</xsl:for-each>
<xsl:value-of select="@url"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
会回来的
/news/reports/sports/photos/A1.jpg
/news/reports/sports/photos/A1.jpg
Run Code Online (Sandbox Code Playgroud)
但如果
<c xml:base="sports/" >
Run Code Online (Sandbox Code Playgroud)
相反
<c xml:base="/sports/" >
Run Code Online (Sandbox Code Playgroud)
随着领先/
, …
似乎当 line-height 大于 1.1 倍 font-size 时,文本会在行中垂直居中。它可以垂直对齐吗?
在这个例子中
p {
background-color: pink;
font-size: 20px;
line-height: 40px
}
span {
background-color: lightblue;
}
Run Code Online (Sandbox Code Playgroud)
<p>
<span>Hello World</span> Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World
</p>
Run Code Online (Sandbox Code Playgroud)
我希望文本对着粉红色框的顶部。所有额外的粉红色空间都将在蓝色下方,而不是在每条线的上方和下方分开。蓝色的盒子会与粉红色的顶部对接。我还没有找到vertical-align: top
或添加line-height
到跨度来帮助。
(编辑以显示文本可能很长。)
这似乎是一个常见的调度问题,但我没有看到解决方案,甚至没有看到问题.它就像拓扑一样,但不同......
比如说有一些依赖性
A -> B -> D -- that is, A must come before B, which must come before D
A -> C -> D
Run Code Online (Sandbox Code Playgroud)
拓扑排序可能有多种解决方案:
A, B, C, D
and A, C, B, D
Run Code Online (Sandbox Code Playgroud)
都是解决方案.
我需要一个返回这个的算法:
(A) -> (B,C) -> (D)
Run Code Online (Sandbox Code Playgroud)
也就是说,做A,然后是B和C的全部,那么你就可以做D.所有歧义或不关心都是分组的.
我认为像Topological Sort with Grouping那样的算法不能正确处理如下情况.
A -> B -> C -> D -> E
A - - - > M - - - > E
Run Code Online (Sandbox Code Playgroud)
为此,算法应该返回
(A) -> (B, C, D, M) -> (E)
Run Code Online (Sandbox Code Playgroud)
这个
A …
Run Code Online (Sandbox Code Playgroud) 我的源XML逐列提供数据; 细胞的高度不同.使用XSLT 1.0,我需要调整它以匹配HTML的逐行表格式.
示例:我需要像这样转换输入数据
<source>
<column>
<cell height="1">col A row 1</cell>
<cell height="2">col A rows 2-3</cell>
</column>
<column>
<cell height="1">col B row 1</cell>
<cell height="1">col B row 2</cell>
<cell height="1">col B row 3</cell>
</column>
<column>
<cell height="3">col C rows 1-3</cell>
</column>
</source>
Run Code Online (Sandbox Code Playgroud)
进入像这样的HTML表
<table>
<tr>
<td rowspan="1">col A row 1</td>
<td rowspan="1">col B row 1</td>
<td rowspan="3">col C rows 1-3</td>
</tr>
<tr>
<td rowspan="2">col A rows 2-3</td>
<td rowspan="1">col B row 2</td>
</tr>
<tr>
<td rowspan="1">col B row 3</td>
</tr> …
Run Code Online (Sandbox Code Playgroud) 是否有CSS选择器匹配具有ANY属性的元素?
<div>
,<p>
和<h2>
将不匹配,但是<div class="important">
,<p align="left">
和<h2 id="rt0">
会。