xml取值 - java读写xml



哪种语言最容易处理XML内容? (6)

XSLT

我建议使用XSLT模板将XML转换为INSERT语句(或任何您需要的),如果需要的话。
您应该能够从您提到的任何语言中调用XSLT。

这会导致比代码冗长的代码少得多。

https://src-bin.com

我们有熟悉这些语言的开发人员 - Ruby,Python,.Net或Java。 我们正在开发一个主要处理XML文档的应用程序。 大部分工作是将预定义的XML文件转换成数据库表格,通过数据库提供XML文档之间的映射,从数据库中创建报告等等。哪种语言将是最容易和最快速的工作? (这是一个网络应用程序)


Answer #1

一个动态的语言规则。 为什么? 映射很容易编码和改变。 您不必重新编译和重建。

事实上,只要有一点巧妙,你可以将“XML XPATH到标签 - >数据库表字段”映射为主应用程序导入的Python代码的不相交块。

Python代码块你的配置文件。 这不是描述配置的.ini文件或.properties文件。 这配置。

我们使用Python,xml.etree和SQLAlchemy(将SQL从你的程序中分离出来),因为我们只需很少的努力就可以运行起来,而且运行起来非常灵活。

source.py

"""A particular XML parser.  Formats change, so sometimes this changes, too."""

import xml.etree.ElementTree as xml

class SSXML_Source( object ):
    ns0= "urn:schemas-microsoft-com:office:spreadsheet"
    ns1= "urn:schemas-microsoft-com:office:excel"
    def __init__( self, aFileName, *sheets ):
        """Initialize a XML source.
        XXX - Create better sheet filtering here, in the constructor.
        @param aFileName: the file name.
        """
        super( SSXML_Source, self ).__init__( aFileName )
        self.log= logging.getLogger( "source.PCIX_XLS" )
        self.dom= etree.parse( aFileName ).getroot()
    def sheets( self ):
        for wb in self.dom.getiterator("{%s}Workbook" % ( self.ns0, ) ):
            for ws in wb.getiterator( "{%s}Worksheet" % ( self.ns0, ) ):
                yield ws
    def rows( self ):
        for s in self.sheets():
            print s.attrib["{%s}Name" % ( self.ns0, ) ]
            for t in s.getiterator( "{%s}Table" % ( self.ns0, ) ):
                for r in t.getiterator( "{%s}Row" % ( self.ns0, ) ):
                    # The XML may not be really useful.
                    # In some cases, you may have to convert to something useful
                    yield r

model.py

"""This is your target object.  
It's part of the problem domain; it rarely changes.
"""
class MyTargetObject( object ):
    def __init__( self ):
        self.someAttr= ""
        self.anotherAttr= ""
        self.this= 0
        self.that= 3.14159
    def aMethod( self ):
        """etc."""
        pass

builder_today.py许多映射配置之一

"""One of many builders.  This changes all the time to fit
specific needs and situations.  The goal is to keep this
short and to-the-point so that it has the mapping and nothing
but the mapping.
"""

import model

class MyTargetBuilder( object ):
    def makeFromXML( self, element ):
        result= model.MyTargetObject()
        result.someAttr= element.findtext( "Some" )
        result.anotherAttr= element.findtext( "Another" )
        result.this= int( element.findtext( "This" ) )
        result.that= float( element.findtext( "that" ) )
        return result

loader.py

"""An application that maps from XML to the domain object
using a configurable "builder".
"""
import model
import source
import builder_1
import builder_2
import builder_today

# Configure this:  pick a builder is appropriate for the data:
b= builder_today.MyTargetBuilder()

s= source.SSXML_Source( sys.argv[1] )
for r in s.rows():
    data= b.makeFromXML( r )
    # ... persist data with a DB save or file write

要进行更改,您可以更正构建器或创建新的构建器。 您调整加载程序源以确定将使用哪个构建器。 您可以没有太多的麻烦,使建设者的选择一个命令行参数。 动态语言中的动态导入看起来对我来说太过分了,但它们很方便。


Answer #2

使用LiNQ到XML的C#或VB.Net。 LiNQ to XML功能非常强大,易于实现


Answer #3

在.NET中,C#3.0和VB9为使用LINQ to XML处理XML提供了极好的支持:

LINQ to XML概述


Answer #4

ECMAScript使用E4X(“ECMAScript for XML”)很好地处理XML。 这可以在Adobe的最新版本的ActionScript版本3中看到。我相信JavaScript 2(将与Firefox 4一起发布,我认为)也将支持E4X。

不知道是否支持独立的JavaScript解释器(即Rhino等),这对于你来说是最重要的,但是如果你看起来不错,你总是可以查找他们的支持(并向我们​​报告:-))。

看一个简单的例子http://en.wikipedia.org/wiki/E4X#Example


Answer #5

一个有趣的解决方案可能是Ruby。 只需使用XML-> Object映射器,然后使用对象关系映射器(ORM)将其放入数据库中。 我不得不用ruby做一个关于XML Mapping的简短讨论,你可以看看幻灯片,看看你最喜欢什么: http : //www.marc-seeger.de/2008/11/25/ruby-xml-mapping/

至于ORM:活动记录或数据映射器应该是要走的路





ruby