跳到内容

pydantic_ai.format_as_xml

format_as_xml

format_as_xml(
    obj: Any,
    root_tag: str = "examples",
    item_tag: str = "example",
    include_root_tag: bool = True,
    none_str: str = "null",
    indent: str | None = "  ",
) -> str

将 Python 对象格式化为 XML。

这很有用,因为大型语言模型 (LLM) 通常发现读取半结构化数据(例如示例)为 XML 比 JSON 等更容易。

支持:str, bytes, bytearray, bool, int, float, date, datetime, Mapping, Iterable, dataclass, 和 BaseModel

参数

名称 类型 描述 默认值
obj Any

要序列化为 XML 的 Python 对象。

必需
root_tag str

用于包裹 XML 的外部标签,使用 None 以省略外部标签。

'examples'
item_tag str

用于可迭代对象(例如列表)中每个项目的标签,对于数据类和 Pydantic 模型,此标签将被类名覆盖。

'example'
include_root_tag bool

是否在输出中包含根标签(如果根标签包含主体,则始终包含根标签 - 例如,当输入是简单值时)。

True
none_str str

用于 None 值的字符串。

'null'
indent str | None

用于美化打印的缩进字符串。

' '

返回值

类型 描述
str

对象的 XML 表示形式。

示例

format_as_xml_example.py
from pydantic_ai.format_as_xml import format_as_xml

print(format_as_xml({'name': 'John', 'height': 6, 'weight': 200}, root_tag='user'))
'''
<user>
  <name>John</name>
  <height>6</height>
  <weight>200</weight>
</user>
'''

pydantic_ai_slim/pydantic_ai/format_as_xml.py 中的源代码
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
def format_as_xml(
    obj: Any,
    root_tag: str = 'examples',
    item_tag: str = 'example',
    include_root_tag: bool = True,
    none_str: str = 'null',
    indent: str | None = '  ',
) -> str:
    """Format a Python object as XML.

    This is useful since LLMs often find it easier to read semi-structured data (e.g. examples) as XML,
    rather than JSON etc.

    Supports: `str`, `bytes`, `bytearray`, `bool`, `int`, `float`, `date`, `datetime`, `Mapping`,
    `Iterable`, `dataclass`, and `BaseModel`.

    Args:
        obj: Python Object to serialize to XML.
        root_tag: Outer tag to wrap the XML in, use `None` to omit the outer tag.
        item_tag: Tag to use for each item in an iterable (e.g. list), this is overridden by the class name
            for dataclasses and Pydantic models.
        include_root_tag: Whether to include the root tag in the output
            (The root tag is always included if it includes a body - e.g. when the input is a simple value).
        none_str: String to use for `None` values.
        indent: Indentation string to use for pretty printing.

    Returns:
        XML representation of the object.

    Example:
    ```python {title="format_as_xml_example.py" lint="skip"}
    from pydantic_ai.format_as_xml import format_as_xml

    print(format_as_xml({'name': 'John', 'height': 6, 'weight': 200}, root_tag='user'))
    '''
    <user>
      <name>John</name>
      <height>6</height>
      <weight>200</weight>
    </user>
    '''
    ```
    """
    el = _ToXml(item_tag=item_tag, none_str=none_str).to_xml(obj, root_tag)
    if not include_root_tag and el.text is None:
        join = '' if indent is None else '\n'
        return join.join(_rootless_xml_elements(el, indent))
    else:
        if indent is not None:
            ElementTree.indent(el, space=indent)
        return ElementTree.tostring(el, encoding='unicode')