首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sgml到xml的转换

sgml到xml的转换
EN

Stack Overflow用户
提问于 2010-12-16 00:47:13
回答 4查看 9.2K关注 0票数 5

我有一个来自.sgm文件的示例sgml数据,我想把它转换成xml。

代码语言:javascript
复制
<?dtd name="viewed">
<?XMLDOC>
<viewed >xyz
<cite>
<yr>2010
<pno cite="2010 abc 1188">10
<?/XMLDOC>

<?XMLDOC>
<viewed>abc.
<cite>
<yr>2010
<pno cite="2010 xyz 5133">9
<?/XMLDOC>

输出应如下所示:

代码语言:javascript
复制
<index1>
    <num viewed="xyz"/>
    <heading>xyz</heading>
    <index-refs>
      <link  caseno="2010 abc 1188</link>
    </index-refs>
  </index-1>
<index1>
    <num viewed="abc"/>
    <heading>abc</heading>
    <index-refs>
      <link  caseno="2010 xyz 5133</link>
    </index-refs>
  </index-1>

这可以在c#中完成吗?或者我们可以使用XSLT2.0来完成这种转换吗?

EN

回答 4

Stack Overflow用户

发布于 2010-12-16 21:48:42

其他人已经给出了一些很好的建议。这里提供了一种方法,首先将输入SGML转换为格式良好的XML,然后使用XSLT将其转换为所需的确切格式。

将SGML转换为格式良好的XML的

OpenSPsuggested by mzjn中的osx工具就是一个很好的工具。由于您的SGML标记省略了结束标记,因此您需要一个DTD,通过它可以确定元素的正确嵌套。如果您没有DTD,则需要创建一个。对于您的示例输入,可以像下面这样简单:

代码语言:javascript
复制
<!ELEMENT toplevel o o (viewed)+>

<!ELEMENT viewed - o (#PCDATA,cite)>
<!ELEMENT cite - o (yr,pno)>
<!ELEMENT yr - o (#PCDATA)>
<!ELEMENT pno - o (#PCDATA)>

<!ATTLIST pno cite CDATA #REQUIRED>

您还需要在SGML文件的开头添加适当的doctype声明。假设您的DTD在文件viewed.dtd中。

代码语言:javascript
复制
<!DOCTYPE toplevel SYSTEM "viewed.dtd" >

添加了这一项后,您现在应该能够使用osx将SGML转换为XML。(它将无法转换以/开头的处理指令,因为这些指令在XML中是不允许的,并将发出有关它们的警告。)

代码语言:javascript
复制
osx input.sgm > input.xml

将生成的XML转换为所需格式的

对于上述情况,您可以使用类似以下XSLT样式表的内容:

代码语言:javascript
复制
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="VIEWED">
    <index1>
      <num viewed="{normalize-space(text())}"/>
      <heading>
        <xsl:value-of select="normalize-space(text())"/>
      </heading>
      <index-refs>
        <xsl:apply-templates select="CITE"/>
      </index-refs>
    </index1>
  </xsl:template>

  <xsl:template match="CITE">
    <link caseno="{PNO/@CITE}"/>
  </xsl:template>

</xsl:stylesheet>
票数 6
EN

Stack Overflow用户

发布于 2010-12-16 04:19:21

也许你可以使用XML 到的转换器。它是OpenSP包的一部分(基于SP,最初由James Clark编写)。

  • http://openjade.sourceforge.net/doc/index.htm
  • http://www.jclark.com/sp/index.htm
票数 3
EN

Stack Overflow用户

发布于 2010-12-16 00:58:00

最初由Chris Lovett开发的能帮助解决这个问题吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4452537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档