PowerShell怎么创建XML对象和文件

发布时间 - 2025-12-30 00:00:00    点击率:
PowerShell创建XML对象和文件应优先使用[xml]类型转换或XmlDocument类,避免字符串拼接;通过Save()方法保存,默认UTF-8编码,需用XmlWriterSettings控制缩进与BOM。

PowerShell 创建 XML 对象和文件非常直接,核心是用 [xml] 类型加速解析或构建,再用 Save() 方法写入磁盘。关键不是“硬拼字符串”,而是利用 .NET 的 XmlDocument 或更轻量的 XmlWriter 来保证格式合法、编码正确。

用 [xml] 类型快速创建简单 XML 对象

适合结构固定、内容不复杂的情况。PowerShell 会自动把符合 XML 格式的字符串转成 XmlDocument 对象:

  • 先写一个合法的 XML 字符串(注意用双引号包裹,支持变量插值)
  • 强制转换为 [xml] 类型,就得到可操作的对象

例如:

```powershell
$xmlStr = @"


张三
28


@"
$doc = [xml]$xmlStr
```

之后就能用 $doc.root.person.name.InnerText 读取,或用 $doc.CreateElement("city") 动态添加节点。

用 XmlDocument 新建空 XML 并逐步构建

适合需要动态生成、逻辑判断或循环添加节点的场景。从空文档开始,用标准 DOM 方法逐层添加:

  • New-Object System.Xml.XmlDocument 创建空对象
  • CreateElement()CreateAttribute() 创建元素与属性
  • AppendChild()PrependChild() 把节点挂到父节点下

示例(生成带属性的用户列表):

```powershell
$doc = New-Object System.Xml.XmlDocument
$root = $doc.CreateElement("users")
$doc.AppendChild($root) | Out-Null

$user = $doc.CreateElement("user")
$idAttr = $doc.CreateAttribute("id")
$idAttr.Value = "101"
$user.SetAttributeNode($idAttr)

$name = $doc.CreateElement("name")
$name.InnerText = "李四"
$user.AppendChild($name) | Out-Null

$root.AppendChild($user) | Out-Null
```

保存 XML 到文件(注意编码和缩进)

直接调用 Save() 方法最稳妥,它默认用 UTF-8 编码并自动处理声明和换行:

  • $doc.Save("C:\data\output.xml") —— 最简写法
  • 如需控制缩进(让文件可读),先配置 XmlWriterSettings

带缩进的保存方式:

```powershell
$settings = New-Object System.Xml.XmlWriterSettings
$settings.Indent = $true
$settings.IndentChars = " "
$settings.Encoding = [System.Text.UTF8Encoding]::new($false)

$writer = [System.Xml.XmlWriter]::Create("C:\data\pretty.xml", $settings)
$doc.WriteTo($writer)
$writer.Close()
```

避免常见坑

实际用时容易踩几个点:

  • 别用字符串拼接 + Out-File 写 XML —— 容易缺闭合标签、编码错乱、特殊字符(如 &)没转义
  • [xml]"&" 会失败,必须写成 "&" 或改用 CreateTextNode()
  • 保存路径不存在时 Save() 会报错,建议提前用 Test-Path -Path $dir -PathType Container 检查目录
  • 如果 XML 中含中文,确保 XmlWriterSettings.Encoding 明确设为 UTF-8(且 $false 参数禁用 BOM,避免某些程序读取异常)

基本上就这些。用好 [xml] 类型和 XmlDocument,既能快速原型,也能写出健壮、可维护的 XML 生成脚本。


# node  # 编码  # app  # ai  # .net  # Object  # NULL  # xml  # 字符串  # 循环  # 类型转换  # 对象  # dom  # bom  # 几个  # 也能  # 设为  # 不存在  # 再用  # 报错  # 如需  # 转换为  # 既能  # 转成 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: html5的keygen标签为什么废弃_替代方案说明【解答】  如何自定义建站之星模板颜色并下载新样式?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  IOS倒计时设置UIButton标题title的抖动问题  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  中山网站制作网页,中山新生登记系统登记流程?  详解jQuery中的事件  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何在云主机上快速搭建网站?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Windows Hello人脸识别突然无法使用  如何用VPS主机快速搭建个人网站?  Laravel Docker环境搭建教程_Laravel Sail使用指南  活动邀请函制作网站有哪些,活动邀请函文案?  nginx修改上传文件大小限制的方法  如何有效防御Web建站篡改攻击?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel如何配置任务调度?(Cron Job示例)  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  香港服务器部署网站为何提示未备案?  手机软键盘弹出时影响布局的解决方法  大型企业网站制作流程,做网站需要注册公司吗?  详解Android中Activity的四大启动模式实验简述  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何快速搭建高效香港服务器网站?  详解阿里云nginx服务器多站点的配置  Laravel怎么在Controller之外的地方验证数据  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何快速生成可下载的建站源码工具?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  个人摄影网站制作流程,摄影爱好者都去什么网站?  C#如何调用原生C++ COM对象详解  Laravel如何处理表单验证?(Requests代码示例)  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何在Tomcat中配置并部署网站项目?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法