【问题标题】:Parsing XML data with Postgres使用 Postgres 解析 XML 数据
【发布时间】:2019-12-12 15:35:22
【问题描述】:

PostgreSQL 9.2.4

如果我添加了重复的主题,我深表歉意,但我似乎无法弄清楚(目前)。我想解析存储在 postgres 表中的 XML 数据。

例如:

select program_information.description FROM program_information WHERE id = 8768787;

给我这样的输出:

<?xml version="1.0"?>
<ProgramInformation>
  <BasicDescription>
    <Title type="original">Zla smrt</Title>
    <Synopsis length="short">Pet prijateljev, starih nekaj čez dvajset let, v samotni koči najde Knjigo mrtvih. S posnetka, ki so ga napravili arheologi, izvedo, da je bilo starodavno besedilo odkrito med kandarijskimi ruševinami sumerske civilizacije.</Synopsis>
    <Keyword type="secondary"></Keyword>
    <ParentalGuidance>
      <mpeg7:ParentalRating href="rn:mpeg:MPAAParentalRatingCS:PG">
        <mpeg7:Name>PG</mpeg7:Name>
      </mpeg7:ParentalRating>
    </ParentalGuidance>
    <CreditsList>
      <CreditsItem role="urn:tva:metadata:TVARoleCS:ACTOR">
        <PersonName>
          <mpeg7:GivenName>Bruce</mpeg7:GivenName>
          <mpeg7:FamilyName>Campbell</mpeg7:FamilyName>
        </PersonName>
      </CreditsItem>
      <CreditsItem role="urn:tva:metadata:TVARoleCS:ACTOR">
        <PersonName>
          <mpeg7:GivenName>Ellen</mpeg7:GivenName>
          <mpeg7:FamilyName>Sandweiss</mpeg7:FamilyName>
        </PersonName>
      </CreditsItem>
      <CreditsItem role="urn:tva:metadata:TVARoleCS:ACTOR">
        <PersonName>
          <mpeg7:GivenName>Betsy</mpeg7:GivenName>
          <mpeg7:FamilyName>Baker</mpeg7:FamilyName>
        </PersonName>
      </CreditsItem>
      <CreditsItem role="urn:tva:metadata:TVARoleCS:DIRECTOR">
        <PersonName>
          <mpeg7:GivenName>Sam</mpeg7:GivenName>
          <mpeg7:FamilyName>Raimi</mpeg7:FamilyName>
        </PersonName>
      </CreditsItem>
    </CreditsList>
    <ReleaseInformation>
      <ReleaseDate>
        <Year>1981</Year>
      </ReleaseDate>
    </ReleaseInformation>
  </BasicDescription>
  <AVAttributes>
    <AudioAttributes>
      <NumOfChannels>2</NumOfChannels>
    </AudioAttributes>
  </AVAttributes>
</ProgramInformation>

所以我想要的是在单独的列(标题、概要、评级、演员等)中对该输出进行解析输出

所以我想要的是像

这样的输出
+----------+-------------+----------------+
|  Title   |  Synopsis   | ParentalRating |
+----------+-------------+----------------+
| my title | some descr  | rating         |
+----------+-------------+----------------+

我已经尝试过使用 xpath,但到目前为止是死路一条……:/

谁能指导我更正查询?谢谢!

M

【问题讨论】:

  • 您能提供到目前为止您一直在尝试的 xpath 查询吗?此外,命名空间mpeg7 是否有声明的前缀?我也没有在这个 xml 文档中找到值 8768787。
  • PostgreSQL 9.2.4

标签: postgresql xpath postgresql-9.2


【解决方案1】:

您的 XML 文档缺少命名空间声明。应该是这样吗?我在&lt;ProgramInformation&gt; 手动添加了一个命名空间,它工作了..

<ProgramInformation xmlns:mpeg7="http://mpeg7.io">

.. 使用以下查询:

SELECT 
  XPATH('//BasicDescription/Title/text()', t.xml) AS title,
  XPATH('//BasicDescription/Synopsis/text()', t.xml) AS synopsis,
  XPATH('//mpeg7:ParentalRating/mpeg7:Name/text()', t.xml,ARRAY[ARRAY['mpeg7', 'http://mpeg4.io']]) AS parentalRating
FROM t;

    title     |                                                                                                              synopsis                                                                                                               | parentalrating 
--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------
 {"Zla smrt"} | {"Pet prijateljev, starih nekaj čez dvajset let, v samotni koči najde Knjigo mrtvih. S posnetka, ki so ga napravili arheologi, izvedo, da je bilo starodavno besedilo odkrito med kandarijskimi ruševinami sumerske civilizacije."} | {PG}
(1 Zeile)

【讨论】:

  • 抱歉回复晚了。这就是我必须处理的输出。我设法从中得到标题、概要和评级。您能帮我获取演员和导演字段,以及 中的 GivenNames 和 FamilyNames。我就是拿不出来。谢谢!
猜你喜欢
  • 2010-11-25
  • 2017-09-11
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多