@thatotherguy가 제안했듯이, 아마 Bash 대신 XSLT 같은 것을 사용하고 싶을 것이다. 너 can parse XML with Bash,하지만 아마 꽤 까다로워 질거야.
<characters>
<character>
<literal>恵</literal>
<misc>
<stroke_count>10</stroke_count>
</misc>
<reading_meaning>
<rmgroup>
<reading r_type="ja_on">ケイ</reading>
<reading r_type="ja_on">エ</reading>
<reading r_type="ja_kun">めぐ.む</reading>
<reading r_type="ja_kun">めぐ.み</reading>
<meaning>favor</meaning>
<meaning>blessing</meaning>
<meaning>grace</meaning>
<meaning>kindness</meaning>
</rmgroup>
</reading_meaning>
</character>
</characters>
당신은 그것을 kanjilookup.xsl
를 실행할 수 있습니다 :
<!-- kanjilookup.xsl -->
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="character"/>
<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>
<!--
From https://stackoverflow.com/questions/9611569/xsl-how-do-you-capitalize-first-letter
-->
<xsl:variable name="vLower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="vUpper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:template name="capitalize">
<xsl:param name="string"/>
<xsl:value-of select=
"concat(translate(substring(
$string, 1, 1), $vLower, $vUpper),
substring($string, 2)
)
"/>
</xsl:template>
<xsl:template match="/">
<xsl:if test="string-length($character) = 0 or not(//literal[. = $character])">
<xsl:message terminate="yes">ERR: No input character given.</xsl:message>
</xsl:if>
<xsl:apply-templates select="characters/character[literal[. = $character]]"/>
</xsl:template>
<xsl:template match="character">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html>
</xsl:text>
<html>
<head/>
<body>
<table>
<tbody>
<xsl:apply-templates/>
</tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="literal">
<caption>
<xsl:value-of select="."/>
</caption>
</xsl:template>
<xsl:template match="stroke_count">
<tr>
<td>
<xsl:call-template name="capitalize">
<xsl:with-param name="string" select="translate(local-name(), '_', ' ')"/>
</xsl:call-template>
</td>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:template>
<xsl:template match="misc | reading_meaning | rmgroup">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="reading | meaning">
<tr>
<td>
<xsl:call-template name="capitalize">
<xsl:with-param name="string" select="local-name()"/>
</xsl:call-template>
<xsl:apply-templates select="@r_type"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
<xsl:template match="@r_type">
<xsl:value-of select="concat(' ', '(', ., ')')"/>
</xsl:template>
</xsl:stylesheet>
하는의 당신이 characters.xml
라는 파일이 있다고 가정 해 봅시다 : @의 thatotherguy의 제안에 따라
, 당신은 이런 식으로 뭔가를 보이는 XSLT 스타일 시트를 가질 수있다 XMLStarlet과 같이 다음과 같이 입력하십시오 :
xml tr kanjilookup.xsl -s character=恵 characters.xml
즉 (꽤 - 인쇄 후)이처럼 보이는 HTML 테이블을 생성 할 수 있습니다 :
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table>
<tbody>
<caption>恵</caption>
<tr>
<td>Stroke count</td>
<td>10</td>
</tr>
<tr>
<td>Reading (ja_on)</td>
<td>ケイ</td>
</tr>
<tr>
<td>Reading (ja_on)</td>
<td>エ</td>
</tr>
<tr>
<td>Reading (ja_kun)</td>
<td>めぐ.む</td>
</tr>
<tr>
<td>Reading (ja_kun)</td>
<td>めぐ.み</td>
</tr>
<tr>
<td>Meaning</td>
<td>favor</td>
</tr>
<tr>
<td>Meaning</td>
<td>blessing</td>
</tr>
<tr>
<td>Meaning</td>
<td>grace</td>
</tr>
<tr>
<td>Meaning</td>
<td>kindness</td>
</tr>
</tbody>
</table>
</body>
</html>
당신은 물론, 사용자의 요구에 맞게 XSLT 스타일 시트를 수정해야 할 것입니다.
이것은 기본적으로 XSLT가 만들어진 것입니다. –
예를 들어 주시겠습니까? @thatotherguy –