我四处搜索并找到了一些关于 xsl:key 和 key() 函数的教程,但不知何故,我显然仍然缺少一些理解。
我需要进行 XML-XML 转换,其中包括大约 10 个字段,您必须在这些字段中从源 XML 获取字符串值,从适当的查找表(提供)中找到适当的数字代码,并将这些代码放入生成的 XML 中。
我有一个这样做的工作版本 xsl:for-each for lookup table,但我怀疑它是次优的,想知道我是否应该使用 select="key('CR-Lookup',$CR)" 而不是 somhow .
所以,我想做的是(树的深处):
<Contributor>
<ContributorRole>producer</ContributorRole>
<ContributorName>Anglet, J.</ContributorName>
</Contributor>
Run Code Online (Sandbox Code Playgroud)
变成这样的东西:
<Contributor>
<ContributorRole id="7" code="818"/>
<Value id="Name">Anglet, J.</Value>
</Contributor>
Run Code Online (Sandbox Code Playgroud)
我制作的文件如下:
查找表文件lookup_ContributorRole.xml:
<lookup id="ContributorRole">
<row>
<id>7</id>
<parentid>NULL</parentid>
<valueMember>1</valueMember>
<displayMember>producer</displayMember>
<code>818</code>
<externalId>NULL</externalId>
<description>NULL</description>
</row>
<!-- more <row>s...-->
</lookup>
Run Code Online (Sandbox Code Playgroud)
Amd XSLT 文件,我尝试在其中进行匹配:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foxml="info:fedora/fedora-system:def/foxml#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rel="info:fedora/fedora-system:def/relations-external#"
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema"
xmlns:audit="info:fedora/fedora-system:def/audit#"
xmlns:fedoraxsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="xsl foxml rdf rel oai_dc dc xsi audit …Run Code Online (Sandbox Code Playgroud) 我有一个 XSLT 转换,用于处理 XML 文件,将其插入到我的 aspx 页面的正文中。
参考以下背景信息:
我的 xml 文件中有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:myCustomStrings="urn:customStrings">
<xsl:output
method="xml" version="2.0"
media-type="text/html"
omit-xml-declaration="yes"
indent="yes"
/>...unrelated stuff left out here
Run Code Online (Sandbox Code Playgroud)
这是相关的输出:
<div id="example" />
<?xml version="1.0" encoding="utf-8"?><div xmlns:myCustomStrings="urn:customStrings"><div id="imFormBody" class="imFormBody">
Run Code Online (Sandbox Code Playgroud)
我的问题与输出有关,特别<?xml version="1.0" encoding="utf-8"?>是与输出中包含的内容有关。问题是否与我使用的自定义方法有关?如果是这样,我真的不认为需要包含 xml 部分,因为命名空间位于 div 标记中。有没有办法确保这些额外的东西按照我的要求被排除在外?
转换代码:是的,它很丑,但我正在制作一些东西的原型:)
public static string SmartNotePageFromTemplate(string patientVisitId, string followupType, bool copyPreviousNote)
{
// create custom object
CustomStrings customStrings = new CustomStrings();//specify class for use in XSLT
string noteXmlFile = …Run Code Online (Sandbox Code Playgroud) 在以下模板调用中
<xsl:call-template name="My_Class">
<xsl:with-param name="className" select="getClassName()"/>
<xsl:with-param name="baseClassName" select="??????"/>
</xsl:call-template>
Run Code Online (Sandbox Code Playgroud)
我必须使用用户定义的第二个参数即 baseClass 的值调用 My_Class 模板。即假设我想通过将第二个参数的值(在上面的代码中显示为????)作为“balaji”来调用这个模板。以上有什么建议吗?提前致谢。
非常适合XSL的初学者.我正在尝试将2个XML文档转换为新的XML文档.我似乎无法将标签打印到新文档.只打印元素的内容.
XML
<books>
<book>
<name>Cat in the Hat</name>
<author>Me</name>
...
...
</book>
...
...
</book>
Run Code Online (Sandbox Code Playgroud)
XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml" indent = "yes" />
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:element name="books">
<xsl:template match="books">
<xsl:element name="book">
<xsl:for-each select="book">
<xsl:element name="name"><xsl:value-of select="name"/></xsl:element>
<xsl:element name="author"><xsl:value-of select="author"/></xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:element>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
输出到XML文件Cat Hat in Hat Me
我需要输出为:
<books>
<book>
<name>Cat in the Hat</name>
<author>Me</author>
</book>
</books>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有这个xml文件:
<writer id_writer="1">
<name>name</name>
</writer>
<film id_writer="1">
</film>
Run Code Online (Sandbox Code Playgroud)
如何使用xslt打印每部电影的作者
<xsl:for-each select="film">
<xsl:value-of select="writer[@id_writer='what to put here']/name"></xsl:value-of>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud) 我需要将入站XML转换并拆分为两个出站XML.其中一个是SKU(包含大约100个元素),另一个是SUPPLIERSKU(包含大约8个元素).
接收端的程序需要文件的方式意味着它们具有非常相似的结构,并且dcsmergedata作为根.但是两个模式都是正确的意味着它们都具有相同的根,这意味着在创建映射时,只有一个模式最终被使用两次.
我通过更改其中一个模式以将dcsmergedata2作为其根来避免这种情况,这解决了映射中的问题,但这意味着接收程序无法读取我的XML,因为它不遵循模式.
解决这个问题的最佳方法是什么?
我试图根据不同标签的属性获得不同的值。我的xml输入:
<parties>
<party code="ADV" id="BOFAUS3NXXX" extension="1">
<name1>BANK OF AMERICA, N.A.</name1>
<city>Code: NY3-222-14-03</city>
<street>Bank of America Merrill Lynch Mail</street>
<country>US</country>
<swift_address/>
</party>
<party code="BNE" id="11111111-1" extension="1">
<name1>BBA Customer 1</name1>
<city>PROVIDENCIA</city>
<street>PROVIDENCIA 1645</street>
<country>ES</country>
<swift_address/>
</party>
</parties>
Run Code Online (Sandbox Code Playgroud)
如果方代码=“ ADV”,我正在尝试获取name1内的值
我尝试使用以下表达式,但它不起作用:
<xsl:if test="value-of select=("ns1:parties/ns1:party/@code")='ADV'">
<td>1st Advising Bank Name: <xsl:value-of select="ns1:parties/ns1:party/name1/></td>
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
提前致谢
嗨我想用xslt替换一个数字小数点后的最后一位数字.
该数字将包含在字段中,例如,如果字段的值为2586.48,则应将其更改为某些内容,例如0000025864Q.该字段的总长度为11.
小数8后的最后一位数用Q替换
这是替补,0 - }
1 - J.
2 - K.
3 - L.
4 - M.
5 - N.
6 - O.
7 - P.
8 - Q.
9 - R.
请帮忙.
以下是一些带有多级无序列表的简单XML,我想将其导入Adobe InDesign:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<STORY>
<Headline>XML test</Headline>
<Standfirst><p>Standfirst</p></Standfirst>
<Story_text>
<h1>Heading 1</h1>
<p>para text</p>
<ul>
<li>
level 1
<ul>
<li>
level 2
<ul>
<li>
level 3
<ul>
<li>
level 4
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
level 1
<ul>
<li>
level 2
</li>
</ul>
</li>
<li>
level 1
</li>
</ul>
</Story_text>
</STORY>
Run Code Online (Sandbox Code Playgroud)
InDesign允许您将其段落样式映射到XML标记.(例如<h1>可以分配给我的Header 1段样式).这在很大程度上是好的; 但是,我的问题出现在多级/嵌套项目符号列表中.
要在InDesign中执行多级项目符号,我为每个级别的项目符号都有单独的段落样式.下面是我希望无序列表出现在InDesign中,括号中的相关段落样式.
问题是InDesign无法区分多级子弹.正如您所期望的那样,如果我分配<li>给其中一个项目符号段落样式,则所有项目符号都将成为该级别,如果我将样式分配给该项目,则相同<ul>.
我想使用XSLT输出以下内容:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<STORY>
<Headline>XML …Run Code Online (Sandbox Code Playgroud) 可能问题很简单,但我只是坚持这个......我有以下XML
<?xml version="1.0" encoding="utf-8"?>
<InfoLinkDocument>
<HAWBUpdate>
<HAWBNumber>41665496563</HAWBNumber>
<HAWBDetails>
<HAWBWeight>2.56</HAWBWeight>
<HAWBWeightUnit>KG</HAWBWeightUnit>
</HAWBDetails>
</HAWBUpdate>
</InfoLinkDocument>
Run Code Online (Sandbox Code Playgroud)
我在我的XSL文件中有以下内容
<xsl:template match="/InfoLinkDocument">
<xsl:for-each select="HAWBUpdate">
<xsl:variable name="HAWBNumber" select="/HAWBNumber" />
<xsl:variable name="HAWBWeight" select="./HAWBDetails/HAWBWeight" />
<xsl:variable name="HAWBWeight2" select="//HAWBDetails/HAWBWeight" />
<xsl:variable name="HAWBWeight3" select="HAWBDetails/HAWBWeight" />
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
但由于某种原因HAWBWeight,HAWBWeight2并且HAWBWeight3是空的.为什么?在这种情况下XPath应该是什么?