我有以下XSLT
<xsl:param name="productsId" select="/macro/productsId" />
<xsl:param name="type" select="/macro/type" /> <!-- value1, value2, value3 -->
<xsl:template match="/">
<xsl:if test="$productsId > 0">
<xsl:variable name="products" select="umbraco.library:GetXmlNodeById($productsId)" />
<div id="carousel-wrap">
<ul id="carousel">
<xsl:for-each select="$products/Product [select only Product with attribute value1, value2 or value3 based on /macro/type]">
<li id="p-{@id}">
<xsl:variable name="title">
<xsl:choose>
<xsl:when test="string-length(productHeading) > 0">
<xsl:value-of select="productHeading" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@nodeName" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{umbraco.library:NiceUrl(@id)}">
<!-- Image -->
<xsl:if test="productImage > 0">
<xsl:variable name="productImage" select="umbraco.library:GetMedia(productImage, 0)" />
<img src="/ImageGen.ashx?image={$productImage/umbracoFile}&height=131" />
</xsl:if> …Run Code Online (Sandbox Code Playgroud) 我正在使用xsl-fo并尝试在 <sup>
例如,我想使2为上标。
<sup id="FNB-0002"><xref href="#Comp_CLJONLINE_CLJ_2010_04_2/FN-0002">2</xref></sup>
我正在使用以下代码,我认为应该可以。
<xsl:template match="sup[@id='*']">
<fo:inline font-size="24pt" font-weight="bold" text-indent="2em" text-transform="uppercase" >
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但是我所应用的样式均未得到认可。我开始认为这是因为2位于外部参照中,而xsl-fo则忽略了它。
谁能给我一些指导,以迎合这些风格和风格
谢谢,
问题是ServiceDocument作为xmlns属性.
---预先分配的XML
System.Xml.XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>
<ServiceDocument
xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\"
>
<BaseUri>
http://xxxx.xxxxx.net/xxx.1/
</BaseUri>
<ProfilesLink>
http://adf.apis.dds.net/af.1/
</ProfilesLink>
<SignedInUser>
<Cid>
4433sfsdfgd
</Cid>
<Uri>
http://fd.apis.afdafd.net/V4.1/cid-xxxxx/adad
</Uri>
</SignedInUser>
<StatusMessageLink>
http://psm.adfa.afd.net/dfa.1/
</StatusMessageLink>
</ServiceDocument>"
);
// Response.Write(xmlDoc.InnerXml);
Run Code Online (Sandbox Code Playgroud)
- // PARSE XML问题低于**
Response.Write(xmlDoc.SelectSingleNode("/ServiceDocument/BaseUri").InnerXml);
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个列出电影的XSLT,我正在设计标题,以便每个标题都有自己的颜色,然后用插值选择标题(XPath?)
这是XSL文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Videos</title>
<style>
table, tr, td { border: thin black solid }
th { background-color: #AAFFAA }
.Daredevil { color: red; }
/* Look at those spaces! Hrmphf! */
.Drag Me To Hell { color: green; }
</style>
</head>
<body>
<table>
<tr><th>Movies</th></tr>
<xsl:apply-templates select="//movie"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="//movie[not(@title=preceding::movie/@title)]">
<!-- Title should be the one of the titles in the CSS -->
<tr class="{@title}"><td><xsl:value-of select="@title"/></td></tr>
</xsl:template>
</xsl:stylesheet> …Run Code Online (Sandbox Code Playgroud) 我想<Field />在给定的XmlNode中找到所有节点(可以任意嵌套).
如果做这样的事情:
foreach(XmlNode n in node.SelectNodes('//Field'))...
Run Code Online (Sandbox Code Playgroud)
这将返回整个文档中的所有节点,而不是所有节点node.
这是XPath应该如何工作的?我查看了一些文档,看起来//Node查询的范围应该是它调用的任何节点.
是否有任何其他技术可以选择特定节点下具有给定名称的所有节点?
在编程方面,我总是遇到一些逻辑问题.我认为这很合乎逻辑,但对我来说很难,因为我无法到达那里.我正在使用XML :: LibXML来解析XML文件.现在在下面的代码中
<CommentsCorrectionsList>
<CommentsCorrections RefType="Cites">
<RefSource>Brain Cogn. 2005 Jul;58(2):245</RefSource>
</CommentsCorrections>
<CommentsCorrections RefType="RepublishedIn">
<RefSource>Brain Cogn. 2005 Jul;58(2):246-8</RefSource>
<PMID Version="1">16044513</PMID>
</CommentsCorrections>
<CommentsCorrections RefType="PartialRetractionOf">
<RefSource>Curr Opin Organ Transplant. 2001 Mar;6(1):95-101</RefSource>
</CommentsCorrections>
</CommentsCorrectionsList>
Run Code Online (Sandbox Code Playgroud)
我想为除"引用"之外的所有其他RefType选择commentscorrections.我该怎么做.我想通过将所有想要的RefType放在另一个变量中然后使用它来获取其他数据来做到这一点.这是正确的方法,我尝试了一些虚拟变量,如下所示
my $sam = "A" || "B" || "C";
print "test= ";
my $test = <>;
if ($test == $sam) {
print $test;
print "success";} else {
print "NO";}
Run Code Online (Sandbox Code Playgroud)
我知道这对你们中的一些人来说可能是愚蠢的,但是我在一个月左右的时间里写了一个程序而且我有时因为不知道该怎么办而感到沮丧.我尝试学习很多东西.如果这真的是一个愚蠢的问题,请原谅我.
还有,我想过
if(!($foo->findnodes('CommentsCorrectionList/CommentsCorrections[@RefType="Cites"]'))){
do foreach and get the data
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,如何避免foreach中的RefType ="Cites"并使其等于我想要的其他RefType.我的意思是我不知道是否可以在foreach语句中使用这样的布尔值.我试图找到并且也做了试验和错误,但手头没什么.任何帮助是极大的赞赏.
谢谢.
在XSLT程序中的某个时刻,我有以下内容:
<xsl:for-each select="tags/tag">
<xsl:apply-templates select="//shows/show[film=//films/film[tag=current()/@id]/@id]|//shows/show[group=//groups/group[film=//films/film[tag=current()/@id]/@id]/@id]">
<xsl:sort select="date" data-type="text" order="ascending"/>
<xsl:sort select="time" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
似乎XPath表达式//shows/show[film=//films/film[tag=current()/@id]/@id]|//shows/show[group=//groups/group[film=//films/film[tag=current()/@id]/@id]/@id]相当复杂,大大减慢了程序的执行速度(与添加引用代码之前的执行时间相比 - 当然是处理相同的数据).
你认为这是正常的,因为表达的性质相对复杂,你是否看到我如何改进它以使其表现更好?
注意:在XPath表达式中,film和//films/film,group并//groups/group引用不同的元素.
请参阅下面的XML输入的精简样本.
<program>
<tags>
<tag id="1">Tag1</tag>
<tag id="2">Tag2</tag>
<tag id="3">Tag3</tag>
</tags>
<films>
<film id="1">
Film1
<tag>2</tag><!-- References: /program/tags/tag/@id=2 -->
</film>
<film id="2">
Film2
<tag>1</tag><!-- References: /program/tags/tag/@id=1 -->
</film>
<film id="3">
Film3
<tag>3</tag><!-- References: /program/tags/tag/@id=3 -->
</film>
<film id="4">
Film4
<tag>3</tag><!-- References: /program/tags/tag/@id=3 -->
</film>
</film>
<groups>
<group id="1">
<film>3</film><!-- References: /program/films/film/@id=3 …Run Code Online (Sandbox Code Playgroud) 我一直在尝试解析London Underground Linestatus XML“提要”-收效甚微。我本来希望使用XPath可以“轻松”,但是我得到的是空节点。
我相当确定我不会正确处理uk名称空间。
这是我的(相当简单的代码):
import libxml2
from urllib2 import urlopen
data = urlopen('http://cloud.tfl.gov.uk/TrackerNet/LineStatus').read()
try:
doc = libxml2.parseDoc(data)
except (libxml2.parserError, TypeError):
print "Problems loading XML"
context = doc.xpathNewContext()
context.xpathRegisterNs("uk", "http://webservices.lul.co.uk")
record_nodes = context.xpathEval('//uk:LineStatus')
for node in record_nodes:
print "******************************"
Run Code Online (Sandbox Code Playgroud)
record_nodes循环被忽略。xml已正确解析。
有人可以说明一下吗?
加载函数已在xmlData类中定义
public class XmlData
{
public void Load(XElement xDoc)
{
var id = xDoc.XPathSelectElements("//ID");
var listIds = xDoc.XPathSelectElements("/Lists//List/ListIDS/ListIDS");
}
}
Run Code Online (Sandbox Code Playgroud)
我只是从我的角度调用Load函数.
XmlData aXmlData = new XmlData();
string input, stringXML = "";
TextReader aTextReader = new StreamReader("D:\\test.xml");
while ((input = aTextReader.ReadLine()) != null)
{
stringXML += input;
}
XElement Content = XElement.Parse(stringXML);
aXmlData.Load(Content);
Run Code Online (Sandbox Code Playgroud)
在加载函数中,即时获取id和listIds为null.
我的test.xml包含
<SEARCH>
<ID>11242</ID>
<Lists>
<List CURRENT="true" AGGREGATEDCHANGED="false">
<ListIDS>
<ListID>100567</ListID>
<ListID>100564</ListID>
<ListID>100025</ListID>
<ListID>2</ListID>
<ListID>1</ListID>
</ListIDS>
</List>
</Lists>
</SEARCH>
Run Code Online (Sandbox Code Playgroud) 我需要在一组页面上提取数据表.我已经可以遍历页面了.
如何提取表格的数据?我正在使用Ruby和Nokogiri,但我认为这是一个相当普遍的问题.
我在下图中的每一行中加下了所需的数据点.
html的一个示例是:http://pastebin.com/YYFPbFLC
我如何通过Nokogiri将这个表解析为有意义的块?
表的xpath是:
/html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table
Run Code Online (Sandbox Code Playgroud)
该表具有可变数量的数据行和格式化行.我只想收集包含有意义数据的行,但是我不容易看到通过XPath区分它的方法,除了第二列可靠地有" keyword".这些行中的每一行都具有以下XPath:
1st meaningful row is: /html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[2]
...
Last meaningful row: /html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[N]
Run Code Online (Sandbox Code Playgroud)
需要匹配"关键字"上的文本内容的第一个有意义的列是:
/html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[2]
Run Code Online (Sandbox Code Playgroud)
第一行数据的最后一列是:
/html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[6]
Run Code Online (Sandbox Code Playgroud)
每行都是一条记录,并且该列td的时间戳是时间戳中的时间; 年,月和日都在各自的变量中,可以附加一个完整的时间戳:
/html/body/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[5]
Run Code Online (Sandbox Code Playgroud) xpath ×10
xml ×4
c# ×3
xslt ×3
.net ×1
contextpath ×1
css ×1
libxml2 ×1
namespaces ×1
nokogiri ×1
performance ×1
perl ×1
python ×1
ruby ×1
umbraco ×1
xml-libxml ×1
xml-parsing ×1
xmldocument ×1
xsl-fo ×1