Sql server 使用XSLT将包含语言部分的XML文件传输到数据库表
下面是我得到的xml文件的一部分。我想将其传输到单个mssql数据库表。我的问题是每个工作元素的不同语言。以下三种语言不会随时间而改变 我想在db表中为每种语言创建2列 示例:英语标题和英语描述 如何使用XSLT查找language name属性并为每种语言创建两个包含name属性内容的元素 更新: 我认为输出应该是这样的:Sql server 使用XSLT将包含语言部分的XML文件传输到数据库表,sql-server,xml,database,xslt,xslt-2.0,Sql Server,Xml,Database,Xslt,Xslt 2.0,下面是我得到的xml文件的一部分。我想将其传输到单个mssql数据库表。我的问题是每个工作元素的不同语言。以下三种语言不会随时间而改变 我想在db表中为每种语言创建2列 示例:英语标题和英语描述 如何使用XSLT查找language name属性并为每种语言创建两个包含name属性内容的元素 更新: 我认为输出应该是这样的: <jobs> <job nr="1"> <EnglishTitle>English title
<jobs>
<job nr="1">
<EnglishTitle>English title</EnglishTitle>
<EnglishDescription>
<li>English description</li>
<li>English description 2</li>
<li>English description 3</li>
</EnglishDescription>
<GermanTitle>German title</GermanTitle>
<GermanDescription>German description</GermanDescription>
<ChineseTitle>Business Mission Chinese</ChineseTitle>
<ChineseDescription>Chinese description</ChineseDescription>
<general>For all languages</general>
</job>
</jobs>
另外,我应该如何存储-元素
表格中的描述?我应该用新行或特殊字符替换它们吗
如果有更好的方法,请随时告诉我。IMHO,您应该为每个描述单独设置一行,并用列描述工作编号、语言和描述本身。比如:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/jobs">
<table>
<xsl:for-each select="job/language/description/text() | job/language/description/li ">
<row>
<col><xsl:value-of select="ancestor::job/@nr"/></col>
<col><xsl:value-of select="ancestor::language/@name"/></col>
<col><xsl:value-of select="."/></col>
</row>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
在您的示例中,将返回:
<?xml version="1.0" encoding="utf-8"?>
<table>
<row>
<col>1</col>
<col>English</col>
<col>English description</col>
</row>
<row>
<col>1</col>
<col>English</col>
<col>English description 2</col>
</row>
<row>
<col>1</col>
<col>English</col>
<col>English description 3</col>
</row>
<row>
<col>1</col>
<col>German</col>
<col>German description</col>
</row>
<row>
<col>1</col>
<col>Chinese</col>
<col>German description</col>
</row>
</table>
但使用此解决方案,我无法将这些列分配给特定的db表列。我已经编辑了我的初始帖子并添加了我的首选解决方案。使用此解决方案,我无法将列分配给特定的db表列。“为什么不?”您首选的解决方案未规范化。在其他缺陷中,它假设始终存在您的示例中指定的三种语言。
<?xml version="1.0" encoding="utf-8"?>
<table>
<row>
<col>1</col>
<col>English</col>
<col>English description</col>
</row>
<row>
<col>1</col>
<col>English</col>
<col>English description 2</col>
</row>
<row>
<col>1</col>
<col>English</col>
<col>English description 3</col>
</row>
<row>
<col>1</col>
<col>German</col>
<col>German description</col>
</row>
<row>
<col>1</col>
<col>Chinese</col>
<col>German description</col>
</row>
</table>