Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSL来自XML。XSLT_Xml_Xslt - Fatal编程技术网

XSL来自XML。XSLT

XSL来自XML。XSLT,xml,xslt,Xml,Xslt,我需要从结果中取一个数字-“(0.5)”,将这个数字设为“障碍”,并将这个数字添加到市场ID的末尾。像这样:219055430.5。你能给我一些建议吗? 以下是XML输入: <?xml version="1.0" encoding="utf-8"?> <odds xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <s

我需要从结果中取一个数字-“(0.5)”,将这个数字设为“障碍”,并将这个数字添加到市场ID的末尾。像这样:219055430.5。你能给我一些建议吗? 以下是XML输入:

<?xml version="1.0" encoding="utf-8"?>
<odds xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <sport name="Soccer">
  <region name="Europe">
   <competition name="UEFA Champions League">
    <event name="Real Madrid - FC Bayern München">
     <market name="[Full Time] Over/Under" suspended="false" id="21905543" expiry="2014-04-23T18:45:00Z" inRunning="false">
      <outcome name="Over (0.5)" id="49954102" price="1" handicap=""/>
     </market>
    </event>
   </competition>
  </region>
 </sport>
</odds> 

我的XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="@suspended"/>

<xsl:template match="market[@suspended='true']"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="@name[. = '1X']">
<xsl:attribute name="name">Real Madrid/Draw</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = '12']">
<xsl:attribute name="name">Real Madrid/FC Bayern München</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'X2']">
<xsl:attribute name="name">Draw/FC Bayern München</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'HWin-HWin']">
<xsl:attribute name="name">Real Madrid/Real Madrid</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'HWin-Draw']">
<xsl:attribute name="name">Real Madrid/Draw</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'Draw-HWin']">
<xsl:attribute name="name">Draw/Real Madrid</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'AWin-AWin']">
<xsl:attribute name="name">FC Bayern München/FC Bayern München</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'AWin-Draw']">
<xsl:attribute name="name">FC Bayern München/Draw</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'Draw-AWin']">
<xsl:attribute name="name">Draw/FC Bayern München</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'AWin-HWin']">
<xsl:attribute name="name">FC Bayern München/Real Madrid</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'HWin-AWin']">
<xsl:attribute name="name">Real Madrid/FC Bayern München</xsl:attribute>
</xsl:template>

<xsl:template match="@name[. = 'Draw-Draw']">
<xsl:attribute name="name">Draw/Draw</xsl:attribute>
</xsl:template>


<xsl:template match="market">
<xsl:choose>
<xsl:when test="inRunning=false">
<market>
<xsl:copy-of select="@name" />
<xsl:copy-of select="@expiry" />
<xsl:attribute name="inRunning">1</xsl:attribute>
<xsl:copy-of select="@id" />
<xsl:apply-templates select="node()" />
</market>
</xsl:when>
<xsl:otherwise>
<market>
<xsl:copy-of select="@name" />
<xsl:copy-of select="@expiry" />
<xsl:attribute name="inRunning">0</xsl:attribute>
<xsl:copy-of select="@id" />
<xsl:apply-templates select="node()" />
</market>
</xsl:otherwise>
</xsl:choose>
</xsl:template>



<xsl:template match="outcome">
<selection >
<xsl:copy-of select="@price" />
<xsl:copy-of select="@id" />
<xsl:apply-templates select="@name" />
<xsl:attribute name="handicap"></xsl:attribute>
<xsl:apply-templates select="node()" />
</selection>
</xsl:template>

</xsl:stylesheet>

皇家马德里/平局
皇家马德里/拜仁慕尼黑俱乐部
抽签/拜仁慕尼黑
皇家马德里/皇家马德里
皇家马德里/平局
平局/皇家马德里
拜仁慕尼黑足球俱乐部/拜仁慕尼黑足球俱乐部
拜仁慕尼黑足球俱乐部/平局
抽签/拜仁慕尼黑
拜仁慕尼黑俱乐部/皇家马德里
皇家马德里/拜仁慕尼黑俱乐部
抽签
1.
0
这必须是输出:

        <market name="[Full Time] Over/Under" expiry="2014-04-23T18:45:00Z" inRunning="0" id="219055430.5"> 
         <selection price="1" id="49954102" name="Over" handicap="0.5"/> 
        </market>

我不确定您为什么需要所有XSLT代码。我甚至不太清楚为什么我们需要看到所有这些代码才能得到这个问题。如果我没有弄错,以下模板将自行提供所需的输出:

<xsl:template match="market">
    <xsl:variable name="handicap" select="substring-before(substring-after(outcome/@name, ' ('), ')')" />
    <market name="{@name}" expiry="{@expiry}" inRunning="{number(@inRunning='true')}" id="{concat(@id, $handicap)}"> 
         <selection price="{outcome/@price}" id="{outcome/@id}" name="{substring-before(outcome/@name, ' (')}" handicap="{$handicap}"/> 
    </market>
</xsl:template>

应用于示例输入时

<?xml version="1.0" encoding="utf-8"?>
<odds xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <sport name="Soccer">
  <region name="Europe">
   <competition name="UEFA Champions League">
    <event name="Real Madrid - FC Bayern München">
     <market name="[Full Time] Over/Under" suspended="false" id="21905543" expiry="2014-04-23T18:45:00Z" inRunning="false">
      <outcome name="Over (0.5)" id="49954102" price="1" handicap=""/>
     </market>
    </event>
   </competition>
  </region>
 </sport>
</odds> 

结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<market name="[Full Time] Over/Under" expiry="2014-04-23T18:45:00Z" inRunning="0" id="219055430.5">
   <selection price="1" id="49954102" name="Over" handicap="0.5"/>
</market>


如果我弄错了,您需要编辑您的问题并为我们详细说明规则。

这与什么有关?您使用的是同一个XML文档(您的文档甚至格式都不好)——这是一个难以置信的巧合。@MathiasMüller是的,它是相同的。很抱歉我形成了它。这个问题似乎是-你为另一个问题创建了新帐户吗?不,这是我的朋友acc,因为我达到了问题限制。你能编辑这个问题以显示你已经尝试过的XSLT吗?另外,
output
元素上的
name
属性是否总是具有相同的格式?谢谢。我编辑了第一篇文章。)这是一小段输出代码。现在它一定是这样的`对于您的代码,我只得到了一行输出。上面的XSLT应用于原始输入,生成(AFAICT)与原始请求的输出完全相同。这里重要的是它解决了您提出的问题(或者更确切地说是问题)。现在,您可以将此解决方案实施到您自己的更大项目中。我们来这里是为了帮助你们解决更难的部分,不是为了帮你们做你们的工作。但我怎么能输出不只是一行。例如,如果我有2或3行的结果?