Sql server 使用XSLT将包含语言部分的XML文件传输到数据库表

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

下面是我得到的xml文件的一部分。我想将其传输到单个mssql数据库表。我的问题是每个工作元素的不同语言。以下三种语言不会随时间而改变

我想在db表中为每种语言创建2列

示例:英语标题和英语描述

如何使用XSLT查找language name属性并为每种语言创建两个包含name属性内容的元素

更新:

我认为输出应该是这样的:

 <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>