RSS 피드의 특정 요소 값을 열로 출력하려고 합니다. 문제의 RSS 피드 구조는 다음과 같습니다(축약).
$ xmlstarlet el ~/tmp/spotn-rss-20140323 | sort -u
rss/channel/title
rss/channel/item/content
rss/channel/item/description
rss/channel/item/link
rss/channel/item/pubDate
rss/channel/item/title
템플릿과 함께 xmlstarlet sel 명령을 적용한 후 항목 제목 목록과 게시 날짜가 열에 정렬되어 있는 것을 보고 싶습니다.
$ xmlstarlet sel -t \
-v rss/channel/item/title \
-v rss/channel/item/pubDate -n ~/tmp/spotn-rss-20140323
Desired output: Actual output:
title1:pubDate1 title1
title2:pubDate2 title2
title3:pubDate3 title3
(...) (...)
pubDate1
pubDate2
pubDate3
(...)
이 문제는 다소 사소한 것 같아서 확인해 보는 것이 좋을 것이라고 생각했습니다.사용자 가이드. 결과적으로 .xls 스타일시트가 포함된 hello world 예제는 적은 노력으로 원하는 효과를 얻을 수 있는 수단을 제공합니다.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="inputFile">-</xsl:param>
<xsl:template match="/">
<xsl:call-template name="t1"/>
</xsl:template>
<xsl:template name="t1">
<xsl:for-each select="rss/channel/item">
<xsl:value-of select="title" />^<xsl:value-of select="pubDate" />;
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
변환 명령을 사용하여 원하는 출력을 얻었지만 xml/xls가 매우 복잡하기 때문에 이 접근 방식이 다소 번거롭다고 생각합니다.말 많은. 내 목표는 XML의 일부 요소를 빠르게 살펴보는 것입니다. 단지 이를 위해 ~450자 스타일시트를 작성하고 싶지는 않습니다.
$ xmlstarlet tr /home/jaroslav/tmp/spotn-rss-style.xls \
/home/jaroslav/tmp/spotn-rss-20140323 |
column -ts^
Test Thu, 20 Mar 2014 18:58:11 +0000;
Assisterende borer – Songa Offshore Thu, 20 Mar 2014 12:48:03 +0000;
Maskinsjef Thu, 20 Mar 2014 10:23:16 +0000;
Maskinsjefer/Motorpassere Sun, 16 Mar 2014 16:37:15 +0000;
Skipsfører Sun, 16 Mar 2014 16:30:19 +0000;
Tilkallingsvikarar matros Thu, 13 Mar 2014 03:15:55 +0000;
Matros Wed, 12 Mar 2014 13:05:57 +0000;
1. styrmann Tue, 11 Mar 2014 05:44:31 +0000;
Overstyrmann Scan Trans Tue, 04 Mar 2014 06:35:29 +0000;
(...)
xls 스타일시트나 sed 및 awk와 같은 외부 스트림 편집기를 사용하지 않고 각 <item>
요소 의 두 값을 별도의 줄에 연결하는 방법이 있다면 가장 유용할 것입니다 .<channel>
답변1
xls 스타일시트가 단서를 제공합니다.
원래 예제 스타일시트에는 xsl:for-each select="/"
가 있고 질문에 있는 스타일시트에는 가 있습니다
select="rss/channel/item"
. 동일한 논리를 사용하여 rss/channel/item을 일치시키고 각 제목, pubDate를 구분 기호로 인쇄합니다.
$ xmlstarlet sel -t \
-m rss/channel/item \
-v title -o '^' \
-v pubDate \
-n ~/tmp/spotn-rss-20140323 |
column -ts^
결과
Test Thu, 20 Mar 2014 18:58:11 +0000
Assisterende borer – Songa Offshore Thu, 20 Mar 2014 12:48:03 +0000
Borer – Boring – Songa Offshore Thu, 20 Mar 2014 12:42:57 +0000
Hydrauliker – Songa Offshore Thu, 20 Mar 2014 12:34:56 +0000