标签: xslt

XSLT 外部查找表正确用法 - key() 函数?

我四处搜索并找到了一些关于 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 xslkey

0
推荐指数
1
解决办法
4973
查看次数

页面中没有省略 xml 声明

我有一个 XSLT 转换,用于处理 XML 文件,将其插入到我的 aspx 页面的正文中。

参考以下背景信息:

xml/xslt 背景

我的 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)

xml asp.net xslt

0
推荐指数
1
解决办法
2567
查看次数

如何在 xsl 文件中调用带参数(默认 vvalue)的模板?

在以下模板调用中

  <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”来调用这个模板。以上有什么建议吗?提前致谢。

xslt xslt-1.0

0
推荐指数
1
解决办法
3079
查看次数

如何使用XSL在XML文档中打印元素标签

非常适合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 xslt xslt-2.0 xslt-1.0

0
推荐指数
1
解决办法
4269
查看次数

如何使用xslt按属性选择元素

我有这个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 xslt

0
推荐指数
1
解决办法
605
查看次数

Biztalk映射到两个具有相同根的XML

我需要将入站XML转换并拆分为两个出站XML.其中一个是SKU(包含大约100个元素),另一个是SUPPLIERSKU(包含大约8个元素).

接收端的程序需要文件的方式意味着它们具有非常相似的结构,并且dcsmergedata作为根.但是两个模式都是正确的意味着它们都具有相同的根,这意味着在创建映射时,只有一个模式最终被使用两次.

我通过更改其中一个模式以将dcsmergedata2作为其根来避免这种情况,这解决了映射中的问题,但这意味着接收程序无法读取我的XML,因为它不遵循模式.

解决这个问题的最佳方法是什么?

制图

xml xslt biztalk

0
推荐指数
1
解决办法
64
查看次数

XSLT-如果属性等于特定值,如何获取标签的值

我试图根据不同标签的属性获得不同的值。我的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)

有人知道吗?

提前致谢

xml xslt

0
推荐指数
1
解决办法
6860
查看次数

如何用xslt中的字符替换小数后的最后一位数字

嗨我想用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.

请帮忙.

xslt xslt-2.0 xslt-1.0 xslt-grouping

0
推荐指数
1
解决办法
146
查看次数

使用XSLT编辑多级项目符号列表中的标记

以下是一些带有多级无序列表的简单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中,括号中的相关段落样式.

  • 1级(文字:子弹1)
    • 2级(文字:子弹2)
      • 3级(文字:子弹3)
        • 4级(文字:子弹4)
  • 1级(文字:子弹1)
    • 2级(文字:子弹2)
  • 1级(文字:子弹1)

问题是InDesign无法区分多级子弹.正如您所期望的那样,如果我分配<li>给其中一个项目符号段落样式,则所有项目符号都将成为该级别,如果我将样式分配给该项目,则相同<ul>.

我想使用XSLT输出以下内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<STORY> 
<Headline>XML …
Run Code Online (Sandbox Code Playgroud)

xml xslt adobe-indesign

0
推荐指数
1
解决办法
420
查看次数

这个XML的XPath是什么?

可能问题很简单,但我只是坚持这个......我有以下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应该是什么?

xml xslt xpath

0
推荐指数
1
解决办法
48
查看次数