如何在 pyspark dataframe 中使用 xpath 从 xml 文档获取嵌套 xml 结构作为字符串?

问题描述 投票:0回答:1

我有一个数据框,其中包含带有 XML 字符串的字符串数据类型列。现在我想使用原始列的嵌套 XML 结构创建一个新列。为此,我尝试在 PySpark 中使用 XPath。

假设我有字符串格式的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <description>
      <tag1>Example text 1</tag1>
      <tag2>Example text 2</tag2>
      <tag4>Example text 3</tag4>
    </description>
    <year>2005</year>
    <price>30.00</price>
  </book>
</bookstore>

现在,我想从另一列中字符串中的

<description>
标签获取嵌套的 XML 结构,即

<description>
  <tag1>Example text 1</tag1>
  <tag2>Example text 2</tag2>
  <tag4>Example text 3</tag4>
</description>

就这样。

例如,原始列是

original_content
,其中:

"<?xml version="1.0" encoding="UTF-8"?><bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><description><tag1>Example text 1</tag1><tag2>Example text 2</tag2><tag4>Example text 3</tag4></description><year>2005</year><price>30.00</price></book></bookstore>"

现在我想用

nested_content
添加一个新列
.withColumn
到数据框中,内容应该是:

"<description><tag1>Example text 1</tag1><tag2>Example text 2</tag2><tag4>Example text 3</tag4></description>"

例如,在 XPath 中:

df = df.withColumn("new", xpath(col("content"), lit('/bookstore/book/description/*')))

*
text()
都不起作用,无法给出
NULL
值。

xml dataframe pyspark xpath
1个回答
0
投票

我对 PySpark 了解不多,但我知道 XPath 表达式

/bookstore/book/description/*
将返回 3 个元素的序列(a
tag1
、a
tag2
tag4
)。 XPath 中的最后一个
/*
检索作为
description
元素子级的任何名称的元素。如果您想引用
description
元素本身,请从表达式中删除最后的
/*

© www.soinside.com 2019 - 2024. All rights reserved.