xslt – sgml到xml的转换
发布时间:2020-12-16 07:58:56 所属栏目:百科 来源:网络整理
导读:我有一个来自我的.sgm文件的以下示例sgml数据,我希望将其转换为xml ?dtd name="viewed"?XMLDOCviewed xyzciteyr2010pno cite="2010 abc 1188"10?/XMLDOC?XMLDOCviewedabc.citeyr2010pno cite="2010 xyz 5133"9?/XMLDOC 输出应该是这样的: index1 num viewed
我有一个来自我的.sgm文件的以下示例sgml数据,我希望将其转换为xml
<?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> 输出应该是这样的: <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#中完成,还是我们可以使用xslt 2.0来进行这种转换?
其他人已经给出了一些好的建议.通过首先将输入SGML转换为格式良好的XML,然后使用XSLT将其转换为您需要的确切格式,这是将它们组合在一起的一种方法.
将您的SGML转换为格式良好的XML 来自OpenSP包suggested by mzjn的osx工具是一个很好的工具.由于您的SGML标记省略了结束标记,因此您需要具有可以确定元素的正确嵌套的DTD.如果您没有DTD,则需要创建一个.对于您的示例输入,它可以像这样简单: <!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. <!DOCTYPE toplevel SYSTEM "viewed.dtd" > 通过此添加,您现在应该可以使用osx将SGML转换为XML. (它将无法转换以/开头的处理指令,因为XML中不允许这些处理指令,并会发出有关它们的警告.) osx input.sgm > input.xml 将生成的XML转换为所需的格式 对于上面的情况,您可以使用类似以下XSLT样式表的内容: <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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |