我已经搜索了互联网/并在此处发帖,试图找到我所遇到问题的答案。我正在学习 XML 并且有一项作业,我必须将以前的 .xml 转换为 .xslt。我已经得到了所有这些,但有一小部分代码无法找到我输入的值。 例如;我知道可能有很多其他方法可以实现这一点,但这是我得到的代码。
部分.xml如下:
<collection>
<movie>
<title>Braveheart</title>
<genre v_genre="Action"/>
<rating v_rating="R"/>
<grading v_grading="4"/>
<summary>William Wallace, a commoner, unites the 13th Century Scots in their battle to overthrow Englands rule </summary>
<year>1995</year>
<director>Mel Gibson</director>
<runtime>177</runtime>
<studio>Icon Entertainment International</studio>
<actors>
<actor ID="001">Mel Gibson</actor>
<actor ID="002">Sophie Marceau</actor>
<actor ID="003">Patrick McGoohan</actor>
</actors>
</movie>
现在我不明白这个值(value)。 如果有人可以帮助我理解那部分,我将不胜感激。问题的第 2 部分将转到 .xslt 文档,所有内容均正确填充,但以下部分除外:流派、评级和分级。我尝试了多种不同的方法来尝试获取要填充的值。这是代码的一部分。
<xslt:for-each select="collection/movie">
<tr>
<td>
<xslt:value-of select="title"/>
</td>
<td>
<xslt:value-of select="genre"/>
</td>
<td>
<xslt:value-of select="rating/v_rating"/>
</td>
<td>
<xslt:value-of select="grading/v_grading"/>
</td>
<td>
<xslt:value-of select="summary"/>
</td>
<td>
<xslt:value-of select="year"/>
</td>
<td>
<xslt:value-of select="director"/>
</td>
<td>
<xslt:value-of select="runtime"/>
</td>
<td>
<xslt:value-of select="studio"/>
</td>
<td>
<xslt:value-of select="actors"/>
</td>
</tr>
</xslt:for-each>
</table>
</body>
</html>
</xslt:template>
</xslt:stylesheet>
我正在努力真正理解为什么将来使用这种方式。整个大学的事情。希望这不会被删除。我已经搜索了很多地方来解决这个问题,但没有示例以这种方式列出。先谢谢你。
最佳答案
你遇到问题的是这些
<genre v_genre="Action"/>
<rating v_rating="R"/>
<grading v_grading="4"/>
因此,如果您注意到,您想要的值保存在属性中,而不是子文本节点中。因此,您需要将 xsl:value-of 更改为此(在 genre
的示例中<xsl:value-of select="genre/@v_genre"/>
如果您热衷于学习 XSLT,可能值得了解使用 xsl:apply-templates 而不是 xsl:for-each。此外,您应该注意删除代码中的重复。查看您的示例,表格单元格的输出顺序与 XML 中的子元素相同。因此,您可以创建一个通用模板来匹配大多数子元素以输出表格单元格。
试试这个 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/collection">
<table>
<xsl:apply-templates select="movie"/>
</table>
</xsl:template>
<xsl:template match="movie">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="genre">
<td>
<xsl:value-of select="@v_genre"/>
</td>
</xsl:template>
<xsl:template match="rating">
<td>
<xsl:value-of select="@v_rating"/>
</td>
</xsl:template>
<xsl:template match="grading">
<td>
<xsl:value-of select="@v_grading"/>
</td>
</xsl:template>
<xsl:template match="*">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
请注意,XSLT 处理器将匹配更具体的命名元素(例如 genre),然后再匹配末尾 * 的通用模板。
关于xml - 大学类(class)的 XML 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569058/
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案
由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A
查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity
我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。
是否有可能以某种方式访问Class.new范围内的a?a=5Class.new{defb;aend}.new.b#NameError:undefinedlocalvariableormethod`a'for#:0x007fa8b15e9af0>#:in`b' 最佳答案 即使@MarekLipka的回答是正确的——改变变量范围总是有风险的。这是可行的,因为每个block都带有创建它的上下文,因此您的局部变量a突然变得不那么局部了——它变成了一个“隐藏的”全局变量:a=5object=Class.new{define_method(