以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XQuery/XLink/XPointer/ 』  (http://bbs.xml.org.cn/list.asp?boardid=14)
----  一个使用xquery的例子  (http://bbs.xml.org.cn/dispbbs.asp?boardid=14&rootid=&id=10934)


--  作者:whqwzy
--  发布时间:10/12/2004 9:51:00 PM

--  一个使用xquery的例子
看到有人问如何使用xquery,其实我也是个菜鸟。
刚刚运行了两个例子,给不会的指个路。
首先下载saxon8.1.1   http://saxon.sourceforge.net/
Saxon-B 8.1.1是免费的,Saxon-SA 8.1.1是有试用期的,前者就够了。
系统要安装jdk1.4.1以上版本,因为saxon是用这个版本写的,但不知道1.3.1行不。
记得设置JAVA_HOME环境变量指向jdk。
然后,试试吧!

例子:文件characters.xml

<characters>
<character>
    <name>Aleria</name>
    <gender>Female</gender>
    <species>Heroleim</species>
    <vocation>Bard</vocation>
    <level>5</level>
    <health>25</health>
</character>
<character>
    <name>Shar</name>
    <gender>Male</gender>
    <species>Human</species>
    <vocation>Merchant</vocation>
    <level>6</level>
    <health>28</health>
</character>
<character>
    <name>Gite</name>
    <gender>Female</gender>
    <species>Aelvar</species>
    <vocation>Mage</vocation>
    <level>7</level>
    <health>18</health>
</character>
<character>
    <name>Horukkan</name>
    <gender>Male</gender>
    <species>Udrecht</species>
    <vocation>Warrior</vocation>
    <level>5</level>
    <health>32</health>
</character>
<character>
    <name>Gounna</name>
    <gender>Female</gender>
    <species>Noleim</species>
    <vocation>Mage</vocation>
    <level>8</level>
    <health>31</health>
</character>
<character>
    <name>Sheira</name>
    <gender>Female</gender>
    <species>Human</species>
    <vocation>Cleric</vocation>
    <level>4</level>
    <health>17</health>
</character>
<character>
    <name>Drue</name>
    <gender>Female</gender>
    <species>Voleim</species>
    <vocation>Warrior</vocation>
    <level>6</level>
    <health>32</health>
</character>
<character>
    <name>Paccu</name>
    <gender>Male</gender>
    <species>Human</species>
    <vocation>Merchant</vocation>
    <level>5</level>
    <health>24</health>
</character>
</characters>

查询文件:Date.xquery
for $character in doc('characters.xml')//character
order by $character/name descending
return
      <dateReport>
            {$character/name}
            
      </dateReport>
(: Stylus Studio meta-information - (c)1998-2003. Sonic Software Corporation. All rights reserved.
<metaInformation>
<scenarios/><MapperInfo><TargetSchema SchemaFilePath="" SchemaRoot="" AssociatedInstance=""/></MapperInfo>
</metaInformation>
:)

在命令提示下,输入:
set classpath=d:\saxon\saxon8.jar (saxon8.jar所在文件夹)
java net.sf.saxon.Query -s characters.xml Date.xquery
ok!
看结果吧!

D:\xml>java net.sf.saxon.Query -s characters.xml Date.xquery
<?xml version="1.0" encoding="UTF-8"?>
<dateReport>
   <name>Sheira</name>
</dateReport>
<dateReport>
   <name>Shar</name>
</dateReport>
<dateReport>
   <name>Paccu</name>
</dateReport>
<dateReport>
   <name>Horukkan</name>
</dateReport>
<dateReport>
   <name>Gounna</name>
</dateReport>
<dateReport>
   <name>Gite</name>
</dateReport>
<dateReport>
   <name>Drue</name>
</dateReport>
<dateReport>
   <name>Aleria</name>
</dateReport>



--  作者:whqwzy
--  发布时间:10/12/2004 10:05:00 PM

--  
其实saxon据说是第一个实现xpath2.0和xslt2.0的,因为他的作者就是xpath组委会的。
下面给个例子关于使用xslt2.0。

源文件:ch07_01.xml

<?xml version="1.0" encoding="UTF-8"?>
<document>

    <data
        city="Glendale"
        people="194973"
        state="California"
    />

    <data
        city="Fresno"
        people="457652"
        state="California"
    />

    <data
        city="Sacramento"
        people="407018"
        state="California"
    />

    <data
        city="Oakland"
        people="399484"
        state="California"
    />

    <data
        city="Boston"
        people="589141"
        state="Massachusetts"
    />

    <data
        city="Cambridge"
        people="101359"
        state="Massachusetts"
    />

    <data
        city="Pittsburgh"
        people="334563"
        state="Pennsylvania"
    />

    <data
        city="Erie"
        people="103707"
        state="Pennsylvania"
    />

    <data
        city="Allentown"
        people="106632"
        state="Pennsylvania"
    />

</document>

xsl文件:ch07_02.xsl

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="document">
    <HTML>

        <HEAD>
            <TITLE>City Data</TITLE>
        </HEAD>

        <BODY>

            <H1>City Data</H1>

            <TABLE BORDER="1" CELLPADDING="5">

<xsl:for-each-group select="data" group-by="@state">
    <TR>
        <TD>
            <xsl:value-of select="@state"/>
        </TD>
        <TD>
            Number of People:
            <xsl:value-of
                select="sum(current-group()/@people)"/>
        </TD>
        <TD>
            Cities Used:
            <xsl:value-of select="current-group()/@city"
                separator=" "/>
        </TD>
    </TR>
</xsl:for-each-group>

            </TABLE>

        </BODY>

    </HTML>
    </xsl:template>

</xsl:stylesheet>

命令:java net.sf.saxon.Transform ch07_01.xml ch07_02.xsl >result.html
然后打开result.html可看到结果


--  作者:hui_xml
--  发布时间:12/29/2004 7:17:00 PM

--  
高手帮我看看
我运行上的代码出这种错误:
    D:\作业\xml>java net.sf.saxon.Query -s characters.xml Date.xquery
Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/TypeInfo
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
        at net.sf.saxon.type.Type.<clinit>(Type.java:72)
        at net.sf.saxon.functions.VendorFunctionLibrary.init(VendorFunctionLibra
ry.java:57)
        at net.sf.saxon.functions.VendorFunctionLibrary.<init>(VendorFunctionLib
rary.java:25)
        at net.sf.saxon.Configuration.getVendorFunctionLibrary(Configuration.jav
a:304)
        at net.sf.saxon.query.StaticQueryContext.reset(StaticQueryContext.java:9
8)
        at net.sf.saxon.query.StaticQueryContext.<init>(StaticQueryContext.java:
68)
        at net.sf.saxon.Query.doMain(Query.java:92)
        at net.sf.saxon.Query.main(Query.java:75)

--  作者:kittypig
--  发布时间:4/24/2006 11:07:00 AM

--  
可否讲更详细些?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
109.375ms