我是XSLT/XML和HTML的新手.我有一个XML文件,我目前使用XSLT在c#中转换为HTML.XML文件只代表从数据库中的表中提取的数据.我现在可以非常轻松地使用XSLT将XML文件转换为HTML,而无需太多格式化.打开时的HTML看起来很普通.我打算格式化HTML,即根据XML文档中的某些键值更改字体,背景颜色,字体颜色等.
XML是使用C#代码每天生成的.XML文件的内容完全取决于执行C#代码的那一天中数据库中表的内容.
XML看起来像这样
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<defects>
<Defectid>56</Defectid>
<testid>111</testid>
<summary>Release of DIT </summary>
<DetectedDate>2011-09-21 </DetectedDate>
<priority>2-Give High Attention</priority>
<status>Ready to Test</status>
<project>Business Intelligence</project>
<assignedTo>peter</assignedTo>
<detectedBy>john</detectedBy>
<severity>3-Average</severity>
</defects>
<defects>
<Defectid>829</Defectid>
<testid>111</testid>
<summary> Data request</summary>
<DetectedDate>2012-01-12 </DetectedDate>
<priority>3-Normal Queue</priority>
<status>Open</status>
<project>web</project>
<assignedTo>tcm</assignedTo>
<detectedBy>john</detectedBy>
<severity>3-Average</severity>
</defects>
<defects>
<Defectid>728</Defectid>
<testid>999</testid>
<summary>Data request</summary>
<DetectedDate>2012-01-11</DetectedDate>
<priority>3-Normal Queue</priority>
<status>Fixed</status>
<project>Business Intelligence</project>
<assignedTo>chris</assignedTo>
<detectedBy>peter</detectedBy>
<severity>3-Average</severity>
</defects>
</NewDataSet>
Run Code Online (Sandbox Code Playgroud)
我打算做的是从这个XML生成HTML表格,它是表格格式,但HTML表格中行的字体颜色应该根据"testid"属性设置.即,对于HTML上的字体颜色,每个"testid"属性应该是唯一的.由于每个testid的行每天都会根据数据库中表中的数据进行更改,因此我不确定如何使用XSLT完成此操作.
当前的XSLT看起来像这样..正如你所看到的,我已经硬编码了字体颜色.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<table BORDER="1" CELLPADDING="3" CELLSPACING="2" WIDTH="100">
<tr>
<td …Run Code Online (Sandbox Code Playgroud) 我读到当函数脚本是dot-sourced时,函数范围内的变量可以在当前作用域中访问.
这是真的吗?这很奇怪,我认为不寻常......
我可以澄清一下这个原因.例如,my-f设置$my-f-var为某个整数,假设为2:
PS1> . .\my-f-script.ps1
PS1> my-f
PS1> $my-f-var
2
Run Code Online (Sandbox Code Playgroud)
我希望这$my-f-var是无法访问的,因为在函数内部!有没有办法让变量变为私有,或者在没有点源脚本的情况下调用函数的方法?
我在stackoverflow找到了很多围绕这个问题的线程.他们现在已经2岁了.所以我想知道是否有人使用scottmuc函数在PowerShell中执行BDD.乍一看似乎非常强大.
你有什么看法?有人知道其他一些有效的BDD框架吗?我想要一些非常接近rspec的东西.
注意我需要BDD而不是TDD(PSUnit)建议/指示.
在powershell上没有多少人使用BDD,看到答案:).这是否意味着BDD完全没用,只是因为PowerShell只是脚本编写?我认为这不是一个正当理由.
无论如何这里的列表到目前为止:
[红宝石1.8]
假设我有:
dummy "string" do
puts "thing"
end
Run Code Online (Sandbox Code Playgroud)
现在,这是对一个方法的调用,该方法具有一个字符串和一个块作为输入参数.尼斯.
现在假设我可以有很多类似的调用(不同的方法名称,相同的参数).例:
otherdummy "string" do
puts "thing"
end
Run Code Online (Sandbox Code Playgroud)
现在因为他们做了同样的事情,而且他们可以成百上千,我不想为想要的类中的每一个创建一个实例方法.我想找到一种基于一般规则在运行时动态定义方法的智能方法.
那可能吗?通常使用哪种技术?
谢谢
我有这个输入:
<school>
<faculty>
<area>
<name>F1A1</name>
</area>
<area>
<name>F1A2</name>
</area>
<area>
<name>F1A3</name>
</area>
</faculty>
<faculty>
<area>
<name>F2A1</name>
</area>
<area>
<name>F2A2</name>
</area>
<area>
<name>F2A3</name>
</area>
</faculty>
<faculty>
<area>
<name>F3A1</name>
</area>
<area>
<name>F3A2</name>
</area>
<area>
<name>F3A3</name>
</area>
</faculty>
</school>
Run Code Online (Sandbox Code Playgroud)
我想得到这个输出(括号中的数字是字符串长度):
F1A1 (4)
F1A2 (4)
F1A3 (4)
F2A1 (4)
F2A2 (4)
F2A3 (4)
F3A1 (4)
F3A2 (4)
F3A3 (4)
Run Code Online (Sandbox Code Playgroud)
以下是要求:
A.初始匹配必须是<xsl:template match="/">.
B.模板T1定义如下:
<xsl:template name="T1">
<xsl:value-of select="concat(.,' (',string-length(.),') ')"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
该脚本需要call-template T1生成所需的输出,并且不得以任何方式更改T1.
C.必须不依赖XSLT中的默认内置模板规则.
这是我的解决方案(看起来很奇怪):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output …Run Code Online (Sandbox Code Playgroud) 我敢肯定这是一个简单的,但我只是不看树木.
我有一个看起来像这样的XML:
<root>
<profil>
<e1 a="2">1</e1>
<m1 a="3">1</m1>
<e2 a="4">1</e2>
<m2 a="5">1</m2>
</profil>
<profil>
<e1 a="5">1</e1>
<m1 a="3">1</m1>
<e2 a="4">1</e2>
<m2 a="4">1</m2>
</profil>
<profil>
<e1 a="7">1</e1>
<m1 a="7">1</m1>
<e2 a="4">1</e2>
<m2 a="2">1</m2>
</profil>
</root>
Run Code Online (Sandbox Code Playgroud)
现在我想知道有多少/ m*/@ a等于e*/@ a per/profil.所以我提出了以下XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="*">
<xsl:element name="root">
<xsl:for-each select="/root/profil">
<xsl:element name="count">
<xsl:value-of select="count(*[contains(name(), 'm') and ./@a = //*[contains(name(),'e')]/@a])"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
但结果是错误的:
<root>
<count>1</count>
<count>1</count>
<count>2</count>
</root>
Run Code Online (Sandbox Code Playgroud)
它应该是
<root>
<count>0</count>
<count>1</count>
<count>1</count>
</root>
Run Code Online (Sandbox Code Playgroud)
有谁有人建议我做错了什么?
我遇到的问题的淡化版本就是这个.对于XML文件,例如:
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item cols="1">Item 1</item>
<item cols="1">Item 2</item>
<item cols="1">Item 3</item>
<item cols="1">Item 4</item>
<item cols="1">Item 5</item>
<item cols="1">Item 6</item>
<item cols="1">Item 7</item>
<item cols="1">Item 8</item>
<item cols="1">Item 9</item>
<item cols="2">Item 10</item>
<item cols="1">Item 11</item>
<item cols="1">Item 12</item>
<item cols="1">Item 13</item>
<item cols="1">Item 14</item>
<item cols="1">Item 15</item>
<item cols="1">Item 16</item>
<item cols="1">Item 17</item>
<item cols="1">Item 18</item>
</items>
Run Code Online (Sandbox Code Playgroud)
我需要能够在单个列页面布局中打印'具有'cols = 1'的项目,以及在双列页面布局中打印'cols = 2'的项目.必须保留物品的顺序.具有相同@cols值的所有连续'项目需要显示为连续流.每次@cols值改变时,我都需要打破一个新页面并根据需要更改布局.
我正在做这样的事情:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="one-column-page-master">
<fo:region-body …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个XSL来将我的XML转换为JUNIT格式的jenkins(见下文)
我的xml看起来像这样:(我有几个"类",如"数据中心"或"网络")
<tests>
<Datacenters>
<test_name>Create NFS Data Center</test_name>
<end_time>2011-06-13 01:22:55</end_time>
<iter_num>1</iter_num>
<start_time>2011-06-13 01:22:52</start_time>
<status>Pass</status>
</Datacenters>
<Datacenters>
<test_name>Create NFS Data Center</test_name>
<end_time>2011-06-13 01:22:55</end_time>
<iter_num>1</iter_num>
<start_time>2011-06-13 01:22:52</start_time>
<status>Pass</status>
</Datacenters>
<Network>
<test_name>Network test 1</test_name>
<end_time>2011-06-13 01:22:57</end_time>
<iter_num>1</iter_num>
<start_time>2011-06-13 01:22:52</start_time>
<status>Pass</status>
</Network>
.....
</tests>
Run Code Online (Sandbox Code Playgroud)
我从WebUI插件中获取了一个XSL并试图改变它,我已经到了一半,但它仍然很棘手.这是我到目前为止所做的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<testsuites>
<! -- need to change /Datacenters to something else so it will work on all nodes -->
<xsl:variable name="buildName" select="//tests/Datacenters/test_name"/>
<xsl:variable name="numOfTests" select="count(//tests/Datacenters/iter_num)"/> …Run Code Online (Sandbox Code Playgroud) 我有一个像以下XML结构:
<Root>
<!-- ...other stuff -->
<Events>
<Event date="0000-00-00">Event Description etc...</Event>
<Event date="0000-00-00">Event Description etc...</Event>
<Event date="0000-00-00">Event Description etc...</Event>
</Events>
<!-- ...other stuff -->
</Root>
Run Code Online (Sandbox Code Playgroud)
然后我在样式表中有XSLT,如下所示:
<xsl:variable name="Events" select="/Root/Events/Event" />
<xsl:template match="/">
<!-- Stuff -->
<xsl:apply-templates select="$Events" />
<!-- Stuff -->
</xsl:template>
<xsl:template match="Event">
<!-- Regular Event Template Transformation here -->
</xsl:template>
<!-- ERROR HAPPENS HERE -->
<xsl:template match="not(node())">
<p class="message">There are currently no upcoming events</p>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我想要做的是有两个模板,一个仅在没有事件时显示.我知道我可以使用XSLT <xsl:choose>和<xsl:when>测试来进行元素计数,只需调用正确的模板就像在过程语言中那样,但我正在尝试学习如何使用模板处理.
我得到的错误是: 表达式的预期结束,找到'('.not - >(< - node())