pub struct XmlSchemaParser;
Expand description
XML Schema 解析器
提供完整的XML Schema解析功能,包括:
- 基础XML解析
- 多文件引用解析
- 类型自动转换
- 循环引用检测
Implementations§
Source§impl XmlSchemaParser
impl XmlSchemaParser
Sourcepub fn parse_from_str(xml_content: &str) -> XmlSchemaResult<SchemaSpec>
pub fn parse_from_str(xml_content: &str) -> XmlSchemaResult<SchemaSpec>
从XML字符串解析Schema定义
这是最基础的解析方法,适用于单一XML文件的解析
§参数
xml_content
- XML格式的schema定义字符串
§返回值
XmlSchemaResult<SchemaSpec>
- 解析后的SchemaSpec或错误
§示例
use mf_core::schema_parser::XmlSchemaParser;
let xml = r#"
<?xml version="1.0" encoding="UTF-8"?>
<schema top_node="doc">
<nodes>
<node name="doc">
<content>paragraph+</content>
</node>
</nodes>
</schema>
"#;
let schema_spec = XmlSchemaParser::parse_from_str(xml)?;
Sourcepub fn parse_from_file(file_path: &str) -> XmlSchemaResult<SchemaSpec>
pub fn parse_from_file(file_path: &str) -> XmlSchemaResult<SchemaSpec>
Sourcepub fn parse_to_extensions(
xml_content: &str,
) -> XmlSchemaResult<Vec<Extensions>>
pub fn parse_to_extensions( xml_content: &str, ) -> XmlSchemaResult<Vec<Extensions>>
从XML字符串解析为Extensions列表
将XML Schema转换为ModuForge可直接使用的Extensions格式 支持自动检测XML格式(是否包含引用)
§参数
xml_content
- XML格式的schema定义字符串
§返回值
XmlSchemaResult<Vec<Extensions>>
- 解析后的Extensions列表或错误
§示例
use mf_core::schema_parser::XmlSchemaParser;
let xml = r#"
<?xml version="1.0" encoding="UTF-8"?>
<schema top_node="doc">
<nodes>
<node name="doc">
<content>paragraph+</content>
</node>
</nodes>
</schema>
"#;
let extensions = XmlSchemaParser::parse_to_extensions(xml)?;
Sourcepub fn parse_extensions_from_file(
file_path: &str,
) -> XmlSchemaResult<Vec<Extensions>>
pub fn parse_extensions_from_file( file_path: &str, ) -> XmlSchemaResult<Vec<Extensions>>
Sourcepub fn parse_multi_file(file_path: &str) -> XmlSchemaResult<SchemaSpec>
pub fn parse_multi_file(file_path: &str) -> XmlSchemaResult<SchemaSpec>
从XML文件解析Schema定义(支持多文件引用)
这是最强大的解析方法,支持:
- import引用(合并到当前schema,不允许覆盖)
- include引用(内联包含,允许覆盖)
- 相对路径解析
- 循环引用检测
- 深度限制保护
§参数
file_path
- 主XML文件路径
§返回值
XmlSchemaResult<SchemaSpec>
- 解析后的SchemaSpec或错误
§示例
use mf_core::schema_parser::XmlSchemaParser;
// 解析支持import/include的schema文件
let schema_spec = XmlSchemaParser::parse_multi_file("./schemas/main.xml")?;
Sourcepub fn parse_multi_file_to_extensions(
file_path: &str,
) -> XmlSchemaResult<Vec<Extensions>>
pub fn parse_multi_file_to_extensions( file_path: &str, ) -> XmlSchemaResult<Vec<Extensions>>
Sourcepub fn parse_file_to_extensions_with_context(
file_path: &str,
context: &mut MultiFileParseContext,
) -> XmlSchemaResult<Vec<Extensions>>
pub fn parse_file_to_extensions_with_context( file_path: &str, context: &mut MultiFileParseContext, ) -> XmlSchemaResult<Vec<Extensions>>
使用上下文解析文件为Extensions(支持global_attributes)
Sourcepub fn parse_file_with_context(
file_path: &str,
context: &mut MultiFileParseContext,
) -> XmlSchemaResult<SchemaSpec>
pub fn parse_file_with_context( file_path: &str, context: &mut MultiFileParseContext, ) -> XmlSchemaResult<SchemaSpec>
使用上下文解析文件(支持引用)
Sourcepub fn convert_to_extensions_from_spec(
schema_spec: SchemaSpec,
) -> XmlSchemaResult<Vec<Extensions>>
pub fn convert_to_extensions_from_spec( schema_spec: SchemaSpec, ) -> XmlSchemaResult<Vec<Extensions>>
从SchemaSpec转换为Extensions
Sourcepub fn parse_attribute_value(value_str: &str) -> XmlSchemaResult<Value>
pub fn parse_attribute_value(value_str: &str) -> XmlSchemaResult<Value>
解析属性默认值
Auto Trait Implementations§
impl Freeze for XmlSchemaParser
impl RefUnwindSafe for XmlSchemaParser
impl Send for XmlSchemaParser
impl Sync for XmlSchemaParser
impl Unpin for XmlSchemaParser
impl UnwindSafe for XmlSchemaParser
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more