C# 在XSLT转换中使用XML元素的值
我有这样一个XML文件:C# 在XSLT转换中使用XML元素的值,c#,xml,xslt,xslt-1.0,C#,Xml,Xslt,Xslt 1.0,我有这样一个XML文件: <Root> <Sensor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <position_x>2170</position_x> <position_y>1830</position_y> <module_n
<Root>
<Sensor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<position_x>2170</position_x>
<position_y>1830</position_y>
<module_number>10</module_number>
<disabled>false</disabled>
<sequence_number>0</sequence_number>
<id_number>0</id_number>
<channel_number>10</channel_number>
</Sensor>
</Root>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<xsl:for-each select="Root/Sensor">
<g transform="translate(position_x,position_y)" id="S">
<text x="118" y="20" font-family="sans-serif" font-size="18px" font-weight="bold" fill="black"><xsl:value-of select="Root/Sensor/sequence_number" /></text>
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="23" y="97" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="Root/Sensor/id_number" /></text>
<text x="23" y="117" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="Root/Sensor/channel_number" /></text>
<text x="142" y="80" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S<xsl:value-of select="Root/Sensor/module_number" /></text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<xsl:for-each select="Root/Sensor">
<g transform="translate({position_x},{position_y})" id="S">
<text x="118" y="20" font-family="sans-serif" font-size="18px" font-weight="bold" fill="black"><xsl:value-of select="sequence_number" /></text>
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="23" y="97" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="id_number" /></text>
<text x="23" y="117" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="channel_number" /></text>
<text x="142" y="80" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S<xsl:value-of select="module_number" /></text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
2170
1830
10
假的
0
0
10
我有这样一个XSL文件:
<Root>
<Sensor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<position_x>2170</position_x>
<position_y>1830</position_y>
<module_number>10</module_number>
<disabled>false</disabled>
<sequence_number>0</sequence_number>
<id_number>0</id_number>
<channel_number>10</channel_number>
</Sensor>
</Root>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<xsl:for-each select="Root/Sensor">
<g transform="translate(position_x,position_y)" id="S">
<text x="118" y="20" font-family="sans-serif" font-size="18px" font-weight="bold" fill="black"><xsl:value-of select="Root/Sensor/sequence_number" /></text>
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="23" y="97" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="Root/Sensor/id_number" /></text>
<text x="23" y="117" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="Root/Sensor/channel_number" /></text>
<text x="142" y="80" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S<xsl:value-of select="Root/Sensor/module_number" /></text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<xsl:for-each select="Root/Sensor">
<g transform="translate({position_x},{position_y})" id="S">
<text x="118" y="20" font-family="sans-serif" font-size="18px" font-weight="bold" fill="black"><xsl:value-of select="sequence_number" /></text>
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="23" y="97" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="id_number" /></text>
<text x="23" y="117" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="channel_number" /></text>
<text x="142" y="80" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S<xsl:value-of select="module_number" /></text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
s
问题是我想在变换中得到位置x(2170)和位置y(1830)的值。但我不知道怎么把它们放在那里。看来我不能把
<xsl:value-of select="Root/Sensor/position_x" />
进入转化
有没有办法做到这一点,还是我走错了方向
编辑:
如果我尝试使用该行:
<g transform="translate(<xsl:value-of select="position_x"/>,<xsl:value-of select="position_y" />)" id="S">
我得到一个错误:“对于每个select=“Root/Sensor”的
内部上下文元素是一个传感器
元素,因此每个的内部的任何路径都应该是相对的,例如,正如Martin Honnen正确指出的那样,首先,您应该从
元素的所有值中删除根/Sensor/
,因为每个
的中的当前节点是一个特定的传感器,而不是整个文档:
<xsl:value-of select="sequence_number" />
因此XSL文件应该如下所示:
<Root>
<Sensor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<position_x>2170</position_x>
<position_y>1830</position_y>
<module_number>10</module_number>
<disabled>false</disabled>
<sequence_number>0</sequence_number>
<id_number>0</id_number>
<channel_number>10</channel_number>
</Sensor>
</Root>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<xsl:for-each select="Root/Sensor">
<g transform="translate(position_x,position_y)" id="S">
<text x="118" y="20" font-family="sans-serif" font-size="18px" font-weight="bold" fill="black"><xsl:value-of select="Root/Sensor/sequence_number" /></text>
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="23" y="97" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="Root/Sensor/id_number" /></text>
<text x="23" y="117" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="Root/Sensor/channel_number" /></text>
<text x="142" y="80" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S<xsl:value-of select="Root/Sensor/module_number" /></text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<xsl:for-each select="Root/Sensor">
<g transform="translate({position_x},{position_y})" id="S">
<text x="118" y="20" font-family="sans-serif" font-size="18px" font-weight="bold" fill="black"><xsl:value-of select="sequence_number" /></text>
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<text x="23" y="97" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="id_number" /></text>
<text x="23" y="117" font-family="sans-serif" font-size="16px" fill="black"><xsl:value-of select="channel_number" /></text>
<text x="142" y="80" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S<xsl:value-of select="module_number" /></text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
s
你好,马丁。如果我把我得到:'