⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlstarlet 使用入门 - fanqiang_com.htm

📁 详细的讲述了XML相关知识
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0064)http://fanqiang.chinaunix.net/program/html/2005-06-30/3356.shtml -->
<HTML><HEAD><TITLE>XMLStarlet 使用入门 - fanqiang.com</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>BODY {
	FONT: 12pt 宋体
}
TH {
	FONT: 12pt 宋体
}
INPUT {
	FONT: 12pt 宋体
}
SELECT {
	FONT: 12pt 宋体
}
TEXTAREA {
	FONT: 12pt 宋体
}
SELECT {
	FONT: 12pt 宋体
}
checkbox {
	FONT: 12pt 宋体
}
A:link {
	COLOR: #e6a306; TEXT-DECORATION: underline
}
A:visited {
	COLOR: #e6a306; TEXT-DECORATION: underline
}
A:hover {
	COLOR: #ffff00; TEXT-DECORATION: underline
}
BODY {
	FONT-SIZE: 12pt; FONT-FAMILY: "宋体", "serif"
}
TD {
	FONT-SIZE: 12pt; FONT-FAMILY: "宋体", "serif"
}
P {
	FONT-SIZE: 9pt; LINE-HEIGHT: 150%
}
</STYLE>

<META content="MSHTML 6.00.2800.1505" name=GENERATOR></HEAD>
<BODY text=#ffffff bgColor=#000000 leftMargin=0 
background="XMLStarlet 使用入门 - fanqiang_com.files/bline.gif" topMargin=5 
onload=setTailPosition() marginwidth="0" marginheight="5">
<CENTER>
<TABLE cellSpacing=0 cellPadding=0 width=750 border=0>
  <TBODY>
  <TR>
    <TD height=45>
      <P align=center><IMG alt="[ 永远的UNIX::UNIX技术资料的宝库 ]" 
      src="XMLStarlet 使用入门 - fanqiang_com.files/title.gif"> </P></TD></TR>
  <TR>
  <TR>
    <TD vAlign=bottom align=left height=40><SMALL><A 
      href="http://fanqiang.chinaunix.net/">首页</A> &gt; 编程技术 &gt; <A 
      href="http://fanqiang.chinaunix.net/program/html/index.shtml">HTML/JS/XML</A> 
      &gt; 正文</SMALL></TD></TR>
  <TR>
    <TD width="100%" bgColor=#d09f0d colSpan=5 height=2><IMG height=1 
      src="XMLStarlet 使用入门 - fanqiang_com.files/c.gif" 
width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=750 border=0>
  <TBODY>
  <TR>
    <TD vAlign=top align=middle><BR>
      <TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
        <TBODY>
        <TR>
          <TH class=f24>
            <H1>XMLStarlet 使用入门</H1></TH></TR>
        <TR>
          <TD align=middle height=20><FONT color=#999999><SMALL>作者:Jack 
            Herrington IBM DW中国 (2005-06-30 11:29:05)</SMALL></FONT></TD></TR>
        <TR>
          <TD><BR></TD></TR>
        <TR>
          <TD height=15></TD></TR>
        <TR>
          <TD class=l17><FONT class=f14 id=zoom><FONT color=#cccccc><!-- 正文begin --><!--StartFragment -->&nbsp; 
            <BLOCKQUOTE>了解如何通过 XMLStarlet 命令行工具、使用简单的命令对 xml 
              进行格式化、转换、修正和编辑。Jack Herrington 
            告诉您掌握这种强大的工具多么轻而易举,它可以大幅度地简化您的工作。</BLOCKQUOTE>
            <P>XMLStarlet 是一种开放源码的 XML 工具箱,可以在 UNIX?、Mac OS&reg; X 或 Microsoft&reg; 
            Windows&reg; 命令行中使用。XMLStarlet 可以验证 XML、格式化 XML、选择其中的一部分、用 XSLT 
            进行转换甚至编辑。这意味着,不需要使用 Perl 或 Java&reg; 之类的编程语言编写任何自定义的代码,就可以在 shell 脚本中加入 
            XML 工具。</P>
            <P>使用 XMLStarlet 需要安装它,而安装需要 libxml2 和 libxslt2 库。在 Windows 上不需要安装 
            libxml2 和 libxslt2,因为 Win32 包已经包含了。可以下载 Win32 
            可执行文件并将其安装到方便从命令行执行的任何位置。如果运行 UNIX,而机器上还没有 libxml2 和 
            libxslt2,则必须下载并安装(请参阅 <A 
            href="http://www-128.ibm.com/developerworks/cn/xml/x-starlet.html#resources" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">参考资料</A>)。 
</P>
            <P>然后转到 XMLStarlet 主页下载最新的构建包(请参阅 <A 
            href="http://www-128.ibm.com/developerworks/cn/xml/x-starlet.html#resources" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">参考资料</A>)。运行 
            <CODE>./configure</CODE> 脚本以便设置构建脚本,然后运行 <CODE>make install</CODE> 
            构建包并安装。如果您不是超级用户,应该使用 <CODE>sudo make install</CODE> 以便将命令安装到 system 
            目录中。</P>
            <P>可能还需要访问 XML、XSLT 和 XML Path Language (XPath) 
            页面以便及时更新这三个标准,这对于充分利用 XMLStarlet 非常重要(请参阅 <A 
            href="http://www-128.ibm.com/developerworks/cn/xml/x-starlet.html#resources" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">参考资料</A>)。</P>
            <P><A name=IDAIDCKB><SPAN class=atitle2>基础</SPAN></A><BR>安装完成后,现在可以对 
            XMLStarlet 做一番漫游了。首先不带参数运行 <CODE>xml</CODE> 命令(参见清单 1)。</P><A 
            name=code1><B>清单 1. XMLStarlet 帮助页</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
% xml
XMLStarlet Toolkit: command-line utilities for XML
Usage: xml [&lt;options&gt;] &lt;command&gt; [&lt;cmd-options&gt;]
where &lt;command&gt; is one of:
ed    (or edit)      - Edit/Update XML document(s)
sel   (or select)    - Select data or query XML document(s) (XPATH, etc)
tr    (or transform) - Transform XML document(s) using XSLT
val   (or validate)  - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
fo    (or format)    - Format XML document(s)
el    (or elements)  - Display element structure of XML document
c14n  (or canonic)   - XML canonicalization
ls    (or list)      - List directory as XML
esc   (or escape)    - Escape special XML characters
unesc (or unescape)  - Unescape special XML characters
pyx   (or xmln)      - Convert XML into PYX format (based on ESIS - ISO 8879)
p2x   (or depyx)     - Convert PYX into XML
&lt;options&gt; are:
--version            - show version
--help  - show help
Wherever file name mentioned in command help it is assumed
that URL can be used instead as well.

Type: xml &lt;command&gt; --help &lt;ENTER&gt; for command help

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)
</CODE></PRE></TD></TR></TBODY></TABLE>
            <P>所有命令的基本格式为 <CODE>xml &lt;command&gt;</CODE>,后面跟一些选项。了解每个选项可以使用 
            <CODE>xml &lt;command&gt; --help</CODE> 命令。比如,清单 2 
            显示了编辑(<CODE>ed</CODE>)命令的帮助。</P><A name=code2><B>清单 2. 
            编辑命令的帮助</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
% xml ed --help
XMLStarlet Toolkit: Edit XML document(s)
Usage: xml ed &lt;global-options&gt; {&lt;action&gt;} [ &lt;xml-file-or-uri&gt; ... ]
where
&lt;global-options&gt;  - global options for editing
&lt;xml-file-or-uri&gt; - input XML document file name/uri (stdin otherwise)

&lt;global-options&gt; are:
-P (or --pf)        - preserve original formatting
-S (or --ps)        - preserve non-significant spaces
-O (or --omit-decl) - omit XML declaration (&lt;?xml ...?&gt;)
-N &lt;name&gt;=&lt;value&gt;   - predefine namespaces (name without 'xmlns:')
ex: xsql=urn:oracle-xsql
Multiple -N options are allowed.
-N options must be last global options.
--help or -h        - display help

where &lt;action&gt;
-d or --delete &lt;xpath&gt;
-i or --insert &lt;xpath&gt; -t (--type) elem|text|attr -n &lt;name&gt; -v (--value) &lt;value&gt;
-a or --append &lt;xpath&gt; -t (--type) elem|text|attr -n &lt;name&gt; -v (--value) &lt;value&gt;
-s or --subnode &lt;xpath&gt; -t (--type) elem|text|attr -n &lt;name&gt; -v (--value) &lt;value&gt;
-m or --move &lt;xpath1&gt; &lt;xpath2&gt;
-r or --rename &lt;xpath1&gt; -v &lt;new-name&gt;
-u or --update &lt;xpath&gt; -v (--value) &lt;value&gt;
-x (--expr) &lt;xpath&gt; (-x is not implemented yet)

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)
</CODE></PRE></TD></TR></TBODY></TABLE>
            <P>这份帮助文件看起来很复杂,但最重要的部分在下面,可以看到如何删除、插入 XML 节点或者改变节点的值,等等。</P>
            <P>
            <TABLE cellSpacing=0 cellPadding=5 width="60%" align=right 
              border=1><TBODY>
              <TR>
                <TD 
                  background="XMLStarlet 使用入门 - fanqiang_com.files/help.html"><P><A 
                  name=IDAXECKB><B>长代码行</B></A><BR>本文中的一些代码行很长,如果不断开就无法在窗口中显示出来。这些行在代码清单中被折叠起来,虽然在实际的命令行中只有一行。这些行用 
                  &raquo; 符号表示(比如清单 3)。</P></TD></TR></TBODY></TABLE></P>
            <P><A name=IDA3ECKB><SPAN class=atitle2>XML 目录列表</SPAN></A><BR>使用 
            XMLStarlet 需要有 XML,因此我们介绍第一个命令 <CODE>xml ls</CODE>,它用 XML 
            给出当前目录的列表。清单 3 给出了一个例子。</P><A name=code3><B>清单 3. XML 
            目录列表</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
% xml ls
&lt;xml&gt;
    &lt;d p="rwxr-xr-x" a="2005.05.04 23:03:46" 
    &raquo; m="2004.03.24 16:21:02" s="374" n="."/&gt;
    &lt;d p="rwxr-xr-x" a="2005.05.04 23:03:46" 
    &raquo; m="2005.05.04 22:13:41" s="1938"n=".."/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 01:13:43" s="6148"n=".DS_Store"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:41:46" s="173" n="build.xml"/&gt;
    &lt;d p="rwxr-xr-x" a="2005.04.30 11:34:27" 
    &raquo; m="2004.03.24 01:13:43" s="544" n="docs"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.21 18:41:58" s="641" n="input.xml"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.23 23:41:15" s="3587"n="main.xsl"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:37:10" s="184" n="Makefile"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:36:41" s="3869"n="MyGenerator.class"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:36:33" s="5265"n="MyGenerator.java"/&gt;
    &lt;d p="rwxr-xr-x" a="2005.04.30 11:34:25" 
    &raquo; m="2004.03.24 00:20:07" s="272" n="output"/&gt;
&lt;/xml&gt;
</CODE></PRE></TD></TR></TBODY></TABLE>
            <P>如果认为目录列表显示的信息太多了,可以(比方说)去掉目录节点,如清单 4 所示。</P><A name=code4><B>清单 
            4. 不含目录节点的列表</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
% xml ls | xml ed -d "//d"
&lt;?xml version="1.0"?&gt;
&lt;xml&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 01:13:43" s="6148" n=".DS_Store"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:41:46" s="173" n="build.xml"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.21 18:41:58" s="641" n="input.xml"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.23 23:41:15" s="3587" n="main.xsl"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:37:10" s="184" n="Makefile"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:36:41" s="3869" n="MyGenerator.class"/&gt;
    &lt;f p="rw-r--r--" a="2005.03.24 17:53:52" 
    &raquo; m="2004.03.24 00:36:33" s="5265" n="MyGenerator.java"/&gt;
&lt;/xml&gt;
</CODE></PRE></TD></TR></TBODY></TABLE>
            <P>使用编辑命令(<CODE>ed</CODE>)从 XML 中去掉了 <CODE>d</CODE> 
            节点。<CODE>ls</CODE> 
            命令把目录输出到标准输出。管道符(<CODE>|</CODE>)将标准输出重定向到编辑命令的标准输入,编辑命令从列表中删除 
            <CODE>d</CODE> 节点。使用 XPath 表达式 <CODE>//d</CODE> 指定 <CODE>d</CODE> 
            节点,它和树中所有层次上的 <CODE>d</CODE> 节点匹配。如果要更加准确,可以使用 
            <CODE>/xml/d</CODE>。</P>
            <P>现在,假设要删除 <CODE>a</CODE> 和 <CODE>m</CODE> 属性(如清单 5 所示)。</P><A 
            name=code5><B>清单 5. 删除 a 和 m 属性的目录列表</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
% xml ls | xml ed -d "//d" -d "//@a" -d "//@m" -d "//@p"
&lt;?xml version="1.0"?&gt;
&lt;xml&gt;
    &lt;f s="6148" n=".DS_Store"/&gt;
    &lt;f s="173" n="build.xml"/&gt;
    &lt;f s="641" n="input.xml"/&gt;
    &lt;f s="3587" n="main.xsl"/&gt;
    &lt;f s="184" n="Makefile"/&gt;
    &lt;f s="3869" n="MyGenerator.class"/&gt;
    &lt;f s="5265" n="MyGenerator.java"/&gt;
&lt;/xml&gt;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -