?? xmlstarlet 使用入門 - fanqiang_com.htm
字號:
<!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> > 編程技術 > <A
href="http://fanqiang.chinaunix.net/program/html/index.shtml">HTML/JS/XML</A>
> 正文</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 -->
<BLOCKQUOTE>了解如何通過 XMLStarlet 命令行工具、使用簡單的命令對 xml
進行格式化、轉換、修正和編輯。Jack Herrington
告訴您掌握這種強大的工具多么輕而易舉,它可以大幅度地簡化您的工作。</BLOCKQUOTE>
<P>XMLStarlet 是一種開放源碼的 XML 工具箱,可以在 UNIX?、Mac OS® X 或 Microsoft®
Windows® 命令行中使用。XMLStarlet 可以驗證 XML、格式化 XML、選擇其中的一部分、用 XSLT
進行轉換甚至編輯。這意味著,不需要使用 Perl 或 Java® 之類的編程語言編寫任何自定義的代碼,就可以在 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 [<options>] <command> [<cmd-options>]
where <command> 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
<options> 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 <command> --help <ENTER> 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 <command></CODE>,后面跟一些選項。了解每個選項可以使用
<CODE>xml <command> --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 <global-options> {<action>} [ <xml-file-or-uri> ... ]
where
<global-options> - global options for editing
<xml-file-or-uri> - input XML document file name/uri (stdin otherwise)
<global-options> are:
-P (or --pf) - preserve original formatting
-S (or --ps) - preserve non-significant spaces
-O (or --omit-decl) - omit XML declaration (<?xml ...?>)
-N <name>=<value> - 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 <action>
-d or --delete <xpath>
-i or --insert <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value>
-a or --append <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value>
-s or --subnode <xpath> -t (--type) elem|text|attr -n <name> -v (--value) <value>
-m or --move <xpath1> <xpath2>
-r or --rename <xpath1> -v <new-name>
-u or --update <xpath> -v (--value) <value>
-x (--expr) <xpath> (-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>本文中的一些代碼行很長,如果不斷開就無法在窗口中顯示出來。這些行在代碼清單中被折疊起來,雖然在實際的命令行中只有一行。這些行用
» 符號表示(比如清單 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
<xml>
<d p="rwxr-xr-x" a="2005.05.04 23:03:46"
» m="2004.03.24 16:21:02" s="374" n="."/>
<d p="rwxr-xr-x" a="2005.05.04 23:03:46"
» m="2005.05.04 22:13:41" s="1938"n=".."/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 01:13:43" s="6148"n=".DS_Store"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:41:46" s="173" n="build.xml"/>
<d p="rwxr-xr-x" a="2005.04.30 11:34:27"
» m="2004.03.24 01:13:43" s="544" n="docs"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.21 18:41:58" s="641" n="input.xml"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.23 23:41:15" s="3587"n="main.xsl"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:37:10" s="184" n="Makefile"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:36:41" s="3869"n="MyGenerator.class"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:36:33" s="5265"n="MyGenerator.java"/>
<d p="rwxr-xr-x" a="2005.04.30 11:34:25"
» m="2004.03.24 00:20:07" s="272" n="output"/>
</xml>
</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"
<?xml version="1.0"?>
<xml>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 01:13:43" s="6148" n=".DS_Store"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:41:46" s="173" n="build.xml"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.21 18:41:58" s="641" n="input.xml"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.23 23:41:15" s="3587" n="main.xsl"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:37:10" s="184" n="Makefile"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:36:41" s="3869" n="MyGenerator.class"/>
<f p="rw-r--r--" a="2005.03.24 17:53:52"
» m="2004.03.24 00:36:33" s="5265" n="MyGenerator.java"/>
</xml>
</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"
<?xml version="1.0"?>
<xml>
<f s="6148" n=".DS_Store"/>
<f s="173" n="build.xml"/>
<f s="641" n="input.xml"/>
<f s="3587" n="main.xsl"/>
<f s="184" n="Makefile"/>
<f s="3869" n="MyGenerator.class"/>
<f s="5265" n="MyGenerator.java"/>
</xml>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -