跳过内容

pydantic_ai.format_as_xml

格式化为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。

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

支持: str, bytes, bytearray, bool, int, float, date, datetime, Mapping, Iterable, dataclassBaseModel

参数:

名称 类型 描述 默认值
obj Any

将Python对象序列化为XML。

required
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'))
'''

  John
  6
  200

'''

Source code in 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')